2012-06-04 18 views
6

Protocol Buffer Basics: C++に入ると、状況に一致するものは見つかりませんでした。 --cpp_outで処理 .proto を以下で、Protobuf:ネストされた(カスタム)オプションのフィールドはC++でどのように処理されるのですか?

message A { 
required int32 foo = 1; 
} 
message B { 
optional A data = 1; 
} 

には、明らかにアクセサ/セッターは(私はここに置くのが面倒だ「ネストされたタイプ」のセクションを含む)のカスタムオプションのフィールドを設定するために生成されて見ていない:

// accessors ------------------------------------------------------- 

    // optional .A = 1; 
    inline bool has_a() const; 
    inline void clear_a(); 
    static const int kAFieldNumber = 1; 
    inline const ::A& a() const; 
    inline ::A* mutable_a(); 
    inline ::A* release_a(); 

だから、B :: AをC++のインスタンスに設定する方法は?


テストファイル.h.ccといくつかの.java


UPD:Javaで、ネストされたフィールドは、ビルダーを経由して設定されています。例えば、上記のリンクを参照してください(ルック.protoは、結果を生成しましたのsetData)。

答えて

10

解決策:返されるdoodadを変更するにはmutableを使用してください。

A a; 
A.set_foo(1); 

B b; 
B.mutable_A()->CopyFrom(a); 
関連する問題