Domanda

Sono appena attraversato buffer protocollo di Google. Sembra essere la soluzione per un C ++ applicazione backend sto scrivendo. Il problema è che non posso sembrare trovare qualche cosa per quanto riguarda i tipi di vettore. La documentazione menziona repeated_types, ma non posso sembrare trovare qualche cosa.

Supponiamo che ho questi insieme di classi:

class UnifiedBinaryHeader
{
public:
    UnifiedBinaryHeader();

    void Serialize(std::ostream& output) const;
    void Deserialize(std::istream& input);

private:
    wxString m_name;
    wxDateTime m_time;
};

struct UnifiedBinaryRow
{
    wxDateTime date;
    float value;

    UnifiedBinaryRow()
    {
        value= 0;
    }

    void Serialize(std::ostream& output) const;
    void Deserialize(std::istream& input);
};

class UnifiedBinaryRowCollection
{
private:
    typedef std::vector<UnifiedBinaryRow> UnifiedBinaryRowVector;

public:
    typedef UnifiedBinaryRowVector::iterator iterator;
    typedef UnifiedBinaryRowVector::const_iterator const_iterator;

    UnifiedBinaryRowCollection();

    iterator begin();
    const_iterator begin() const;
    iterator end();
    const_iterator end() const;

    UnifiedBinaryRowCollection& AddRow(const UnifiedBinaryRow& row);

    size_t NumRows() const;

private:
    UnifiedBinaryRowVector m_rows;
};


class UnifiedBinaryFormat
{
public:
    UnifiedBinaryFormat();

    UnifiedBinaryHeader& Header();
    const UnifiedBinaryHeader& Header() const;
    UnifiedBinaryFormat& Header(UnifiedBinaryHeader& header);

    UnifiedBinaryRowCollection& Rows();
    const UnifiedBinaryRowCollection& Rows() const;
    UnifiedBinaryFormat& Rows(const UnifiedBinaryRowCollection& rows);

    void Serialize(std::ostream& output) const;
    void Deserialize(std::istream& input);

private:
    UnifiedBinaryHeader m_header;
    UnifiedBinaryRowCollection m_rows;
};

Come posso scrivere un file Proto per queste classi, visto che sto usando un sacco di membri che sono vettori. Qualsiasi aiuto nel "porting" queste classi in un file di Proto posso utilizzare sarà molto apprezzato.

È stato utile?

Soluzione

Penso che tu frainteso la filosofia.

IMHO di Google buffer protocollo è destinato a produrre di classe 'messaggi' che sono diverse dalle vostre classi di applicazione. Si noti che Protobuf NON è una libreria di serializzazione (anche se può essere utilizzato come tale). Si tratta di una libreria di messaggistica, che consente di scambiare messaggi tra i diversi sottosistemi / lingue.

Quindi, proto genererà classe i messaggi, e quindi per il vostro serializzazione / deserializzazione sarà convertire il flusso a un oggetto della propria classe e il vostro compito è quello di convertire l'oggetto proto al vostro oggetto reale, o un gruppo di oggetti.

E 'un bel modo per disaccoppiare l'effettiva implementazione della classe dal meccanismo di serializzazione / deserializzazione IMO.

Altri suggerimenti

Penso che la risposta per la conversione di utilizzare protobuf messaggi è qualcosa di simile:

message Classroom { 
   required int id = 1; 
   required People teacher = 2;
   repeated People bar = 3; 
}

message People { 
   required int id = 1; 
   required string name = 2; 
} 
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top