2013-07-07 18 views
5

Vorrei utilizzare protobuf con un progetto C++ su cui sto lavorando. Tuttavia, non mi piace lavorare con le classi generate automaticamente protoc create e preferisco attenermi ai POCO che ho già. Questo perché i POCO sono già in uso in altre parti del codice e voglio essere in grado di cambiare il meccanismo di serializzazione con facilità in seguito. Ma scrivere manualmente convertitori tra POCO e classi di messaggi protobuf sembra noioso e sbagliato.Utilizzo di protobuf e POCO in C++

Voglio sapere se c'è un modo per usare protobuf per creare un serializzatore - una classe generata automaticamente che sarà in grado di serializzare e deserializzare i miei POCO, senza infastidirmi con gli interni.

Grazie.

+0

Puoi semplicemente scrivere i tuoi POCO direttamente sul filo/disco? Ovviamente questo non funzionerà se contengono puntatori .... –

+0

I miei POCO contengono tipi primitivi, stringhe, puntatori ad altri POCO e vettori di quanto sopra. Anche i puntatori dovranno essere gestiti (ad esempio serializzando anche l'oggetto appuntito e facendo riferimento ad esso con un id). Scrivere direttamente è serializzare, posso farlo manualmente, sto solo cercando di trovare un modo per evitarlo. – Vadim

+0

Avro (http://avro.apache.org/) potrebbe essere più vicino a quello che vuoi (o sarebbe in java). Inoltre con i buffer del protocollo non sei limitato alla versione ufficiale; puoi scrivere il tuo generatore di codice. C'è un'altra versione di C/C++ https://sourceforge.net/projects/spbc/files/spbc/spbc-1.0.1/ elencata. Non è stato modificato in 4 anni quindi non sarà aggiornato –

risposta

1

In primo luogo, come si può Cap'n Proto meglio, è stato creato da uno degli ex manutentori Google Protocol Buffer di Google. Vale la pena esaminare, comunque.

In caso contrario, è necessario considerare perché si sta utilizzando i buffer del protocollo di Google.

Se si desidera ottenere la compatibilità avanti e indietro e poter aprire, quindi modificare, quindi salvare un oggetto creato da una persona diversa, con una versione diversa della dichiarazione del protocollo di protocollo, quindi inviarlo insieme a un'altra persona con una versione persino diversa della dichiarazione ... quindi è sufficiente mordere il proiettile e utilizzare il C++ generato dal compilatore del buffer del protocollo di Google.

In realtà non è solo un formato di serializzazione. È progettato specificamente per rendere più semplice la vita con diverse versioni della serializzazione, nel tempo.

Se non è necessario che la flessibilità, e non ti piace il codice generato, si può prendere in considerazione uno strumento di serializzazione diverso.

+0

Ehi. Grazie. Capn'n Proto sembra interessante e darò un'occhiata a questo. Non è rilevante per il lavoro in corso (nessun supporto per Java, il prodotto è troppo nuovo per essere utilizzato nella produzione, ecc.).Voglio usare protobuf per i seguenti motivi: è veloce e compatto e ha ereditato il supporto C++ e Java. Le versioni non sono davvero un problema. Non mi interessa il codice generato, infatti, non mi interessa affatto ciò che viene generato. Voglio solo che il codice generato funzioni sui miei POCO o POJO. Posso scrivere qualcosa del genere da solo e volevo solo assicurarmi che non sia già stato fatto. – Vadim

+0

Google Protocol Buffers genererà sempre codice (che è il motivo per cui è necessario prestare attenzione) e non funzionerà mai sui tuoi POCO o POJO. Quindi, potrebbe non essere giusto per te. Non sono a conoscenza di alcuna libreria di serializzazione che funzioni sui tuoi POCO. –