Protobuf:如何在C ++中处理嵌套(自定义)可选字段?

时间:2012-06-04 03:45:26

标签: c++ protocol-buffers

阅读Protocol Buffer Basics: C++,找不到与此情况相符的内容:使用--cpp_out

处理以下 .proto
message A {
 required int32 foo = 1;
}
message B {
 optional A data = 1;
}

没有明显的生成访问器/ setter来设置自定义可选字段(包括'嵌套类型'部分,我懒得放在这里):

   // 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();

那么,如何在C ++中将B :: A设置为某个A实例?


测试文件.proto,生成了结果:.h.cc和一些.java


Upd:在Java中,嵌套字段通过Builder设置:例如,参见上面的链接(查找 setData )。

1 个答案:

答案 0 :(得分:11)

解决方案:使用mutable修改一些返回的doodad。

A a;
A.set_foo(1);

B b;
B.mutable_A()->CopyFrom(a);