Domanda

Esistono già buone librerie di serializzazione C ++ che supportano la serializzazione parziale?

Per "serializzazione parziale" Voglio dire che potrei voler salvare i valori di 3 membri specifici e in seguito poter applicare quella copia salvata a un'istanza diversa. Aggiornerei solo quei 3 membri e lascerei gli altri intatti.

Ciò sarebbe utile per sincronizzare i dati su una rete. Supponiamo di avere un oggetto su un client e un server e quando un membro cambia sul server voglio inviare al client un messaggio contenente il valore aggiornato per quel membro e solo quel membro . Non voglio inviare una copia dell'intero oggetto sul filo.

boost :: serialization sembra supporta solo tutto o niente.

Modifica: 3 anni dopo aver scritto questo articolo, lo guardo indietro e mi dico: "wut?" boost :: serialization ti permette di definire quali membri vuoi salvare o meno, quindi supporterebbe la "serializzazione parziale" come sembra averlo descritto. Inoltre, poiché il C ++ manca di librerie di serializzazione a riflessione, è necessario specificare esplicitamente ogni membro che si sta salvando, a meno che non vengano forniti con una sorta di strumento esterno per analizzare i file di origine o avere un formato di file di input separato utilizzato per generare il codice C ++ (ad es. cosa fanno i buffer di protocollo). Penso di essere stato concettualmente confuso quando ho scritto questo.

È stato utile?

Soluzione

Chiaramente non stai cercando la serializzazione qui.

La serializzazione riguarda il salvataggio di un oggetto e la sua ricostruzione dal flusso di byte. Pensa ai salvataggi dei videogiochi o al contesto della sessione per un server web.

Qui quello che ti serve è la messaggistica. FlatBuffers di Google è carino per questo. Specifica un messaggio che conterrà ogni singolo campo come facoltativo, alla ricezione del messaggio, aggiorna il tuo oggetto con i campi esistenti e lascia gli altri intatti.

La cosa grandiosa con FlatBuffers è che gestisce bene la compatibilità avanti e indietro, così come la codifica di testo e binaria (il testo è ottimo per il debug e il binario è migliore per prestazioni pure), oltre a un passo di analisi a costo zero.

E puoi persino decodificare i messaggi con un'altra lingua (ad esempio pitone o ruby) se li salvi da qualche parte e vuoi mettere insieme una GUI HTML per ispezionarlo!

Altri suggerimenti

Anche se non ne ho familiarità, puoi anche consultare di Google Buffer di protocollo .

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top