Qualcuno sa di una funzionalità di "livello linguistico" per il decapaggio in C++? Non voglio qualcosa come la serializzazione Boost o i buffer del protocollo Google. Invece, qualcosa che potrebbe serializzare automaticamente tutti i membri di una classe (con un'opzione per escludere alcuni membri, o perché non sono serializzabili, o perché semplicemente non mi interessa salvarli per dopo). Questo potrebbe essere ottenuto con un'azione aggiuntiva in fase di analisi, che genererebbe codice per gestire la serializzazione automatica. Qualcuno ha mai sentito parlare di qualcosa del genere?Decapaggio in stile Python per C++?
risposta
Non credo che ci sia un modo per farlo in una lingua senza funzionalità di introspezione di runtime.
C'è la serializzazione C++ standard con gli operatori < < e >>, anche se dovrai implementarli per ciascuna delle tue classi (che suona come non vuoi). Alcuni professionisti dicono che dovresti sempre implementare questi operatori, anche se, ovviamente, la maggior parte di noi raramente lo fa.
forse xml Associazione dati? gsoap è solo una delle molte opzioni. È possibile generare automaticamente il codice per il mapping tra struttura dati e schema xml. Non è sicuro che l'impostazione di questo sarebbe più facile di altre opzioni che si menzionano
Un modo rapido per fare ciò che ho funzionato una volta quando avevo bisogno di salvare una struttura in un file era di lanciare la mia struct su una matrice char
e scrivere fuori in un file. Poi, quando volevo caricare di nuovo la mia struttura, leggevo l'intero file (in modalità binaria) e lanciavo l'intera cosa al tipo della mia struttura. Abbastanza facile e sfrutta il fatto che le strutture sono memorizzate come blocchi contigui in memoria. Non mi aspetto che questo funzioni con strutture dati o indicatori contorti, però, ma spunti di riflessione.
Questa è una strategia di serializzazione vecchia ed estremamente _poor_ che fallirà in modo spettacolare in qualsiasi numero di condizioni, come ad esempio: diversi flag del compilatore, diverse versioni del compilatore, diverse CPU (nemmeno architetture necessariamente diverse!), Diversi sistemi operativi ... –
qualcosa che potrebbe automaticamente serializzare tutti i membri di una classe
Questo non è possibile in C++. Python, C#, Java et al. utilizzare l'introspezione run-time per raggiungere questo obiettivo. Non è possibile farlo in C++, RTTI non è abbastanza potente.
In sostanza, non c'è nulla nel linguaggio C++ che consentirebbe a qualcuno di scoprire le variabili membro di un oggetto in fase di esecuzione. Senza di ciò, non puoi serializzarli automaticamente.
- 1. Informazioni sul decapaggio in Python
- 2. decapaggio garbo-degradanti in Python
- 3. classmethod in stile Python per C#?
- 4. Python, cPickle, funzioni lambda decapaggio
- 5. Decapaggio da più thread in Python
- 6. Gli iteratori in stile Python in C
- 7. Decapaggio cv2.KeyPoint causa PicklingError
- 8. tratti dinamici non sopravvivono decapaggio
- 9. Strumento per trovare cast in stile C
- 10. Python stile intero divisione e modulo in C
- 11. Guida di stile per C#?
- 12. Decapaggio di un grafico con cicli
- 13. PEG per Python stile di rientro
- 14. stile Python per `funzione chained` chiama
- 15. Buon libro in stile C#?
- 16. Stream C++ contro IO in stile C?
- 17. C++ 11 callback in stile?
- 18. Nome C in stile C di D?
- 19. Perché ottengo un comportamento imprevisto in Python isinstance dopo il decapaggio?
- 20. Decoratori in stile Python in Java?
- 21. std :: vettori stile c e stile
- 22. Citazioni in stile Perl per stringhe lunghe in C++
- 23. soluzione Java per C++ direttiva stile compilatore
- 24. C++ stile Google: correzione automatica
- 25. Esiste un controllo di stile per C++?
- 26. Array di stile NumPy per C++?
- 27. Controllo stile di codifica per C
- 28. Macro in stile C in Go
- 29. Versioning case class di decapaggio Scala
- 30. Conservazione della visualizzazione numpy durante il decapaggio
Come dice Jacob di seguito, mi stavo chiedendo se qualcuno avesse visto uno strumento in fase di compilazione che potrebbe essere in grado di risolvere questo problema. Immagino che non ci sia niente del genere là fuori. –
@RoniChoudhury A meno che non mi sbagli, la serializzazione Boost fa un buon lavoro viste le restrizioni del linguaggio. – Marcin
@Marcin - Boost.Serialize fa davvero un buon lavoro, ma devi scrivere una funzione 'serialize()' che conosce i dettagli dell'oggetto che vuoi serializzare. – Ferruccio