2013-02-20 15 views
10

Hi ha già qualcuno in grado di serializzare un C++ 11 std :: shared_ptr con boost :: serialization. Ci sono molti post obsoleti, ma nessuno con una soluzione accettabile. Non sto discutendo perché voglio usare std :: shared_ptr, basta accettarlo!C++ 11 std :: shared_ptr + boost :: serializzazione

Ho trovato questo altro post: boost serialize and std::shared_ptr ma non risponde al mio problema come serializzare lo std :: shared_ptr suggerisce solo di usare boost :: shared_ptr che non è possibile nel mio caso.

E anche questo post How can boost::serialization be used with std::shared_ptr from C++11? consiglia di utilizzare boost :: shared_ptr.

Sarei interessato se qualcuno ha già trovato un lavoro che riesce a serializzare lo std :: shared_ptr.

Hey ragazzi Ho finalmente trovato una soluzione al mio problema vedere https://stackoverflow.com/a/14999396/2039157 per la mia risposta.

+0

Convertire std :: shared_ptr per boost :: shared_ptr per serializzare. – ForEveR

+0

Sì, stavo per dire, se si usa 'boost :: shared_ptr' è un'opzione, questa è la risposta: http://stackoverflow.com/questions/9944274/boost-serialize-and-stdshared-ptr – jogojapan

+0

Hm, cosa intendi per conversione? Spero che non intendi sostituire std :: shared_ptr con boost :: shared_ptr;) Fornisci un esempio su come dovrebbe funzionare la conversione. – denim

risposta

0

Non è possibile "solo" creare un serializzatore < < e deserializzatore >> che "solo" trasformerà la serializzazione shptr in serializzazione puntatore-oggetto? Se non ancora fatto, sono quasi sicuro che ciò sia possibile in < 100 righe di codice.

Inoltre, so che hai specificato di non chiedere, ma lo farò ancora: quando tenti di serializzare la variabile "X" che è shptr, perché non puoi semplicemente serializzare dereferenziato * shptr? Non mi sembra abbastanza la differenza con l'aggiunta di serializzazione per smartptrs .. Hm .. ok. estetica. Ma penso ancora che sia fattibile.

In ogni modo, per quanto si può colpire un altro muro: se si utilizza di ereditarietà di classe e se portate con gli oggetti all'interno shptr tramite puntatore alla classe base, si avrà il problema ovvio che il serializzatore non si sa che cosa effettivamente è ordinato per la serializzazione. Ma questo è un classico problema di serializzazione senza RTTI, che, beh, devi risolvere in qualche modo, ma non è questo il problema di shptrs.

disclaimer: l'ultima volta che ho usato boost :: serialization era qualche anno fa. In realtà non ho provato a serializzare shptr, ma da quello che ricordo, era piuttosto un framework aperto, relativamente facile da estendere per qualsiasi tipo personalizzato, quindi presumo che gli shptr non siano meglio delle mie strane classi, ovvero I-managed serializzare :)

+2

Il problema è che il framework boost :: serialization fornisce un file di intestazione "boost/serialization/shared_ptr.hpp" che permette di serializzare un boost :: shared_ptr e questo funziona abbastanza volontà (l'ho provato). Il problema è che ho std :: shared_ptr che devo serializzare e non c'è un'intestazione speciale nella lib di boost :: serialization che gestisce lo std :: shared_ptr. Quindi volevo sapere se qualcun altro è riuscito a serializzare uno std :: shared_ptr. – denim

Problemi correlati