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

Protobuf: how nested (custom) optional fields are to be handled in C++?

本文关键字:自定义 字段 嵌套 处理 C++ Protobuf      更新时间:2023-10-16

读入协议缓冲区基础知识: C++,没有发现任何与情况匹配的内容:; 使用以下 .proto 处理--cpp_out

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


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

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

A a;
A.set_foo(1);
B b;
B.mutable_A()->CopyFrom(a);