Google-protobuf:如何使用Google协议缓冲区创建联盟

Sph*_*and 10 c protocol-buffers

我目前正在尝试使用Google Protocol Buffers for C语言.我不太确定如何使用GPB创建C联合.

例如,使用proto文件如下:

message msgToSend
{
 required Type msg_type=1; //Type is a predefined enum to determine message type
 optional ReqMsg1 msg1=2;
 optional ReqMsg2 msg2=3;
}
Run Code Online (Sandbox Code Playgroud)

我期望上面生成一个union编译,但生成的结构如下:

struct _msgToSend
{
 ProtobufCMessage base;
 Type msg_type;
 ReqMsg1 msg1;
 ReqMsg2 msg2;
}
Run Code Online (Sandbox Code Playgroud)

Qua*_*rra 22

在protobuf中有一个专门的结构(我在C++中使用它,但不确定它是否适用于纯C):

message MyUnion {
    oneof MyUnionOneof {
        bool booleanValue = 1;
        string stringValue = 2;
    }
}
Run Code Online (Sandbox Code Playgroud)

请查看以下链接:https://developers.google.com/protocol-buffers/docs/proto#oneof


unw*_*ind -12

我认为你不能。

在 Protobuf 中,“可选”并不意味着像 C 联合体那样“要么是这个,要么是另一个”;它的意思是“这可能在这里”。这就是为什么您会得到一个可以表示存在的两个可选字段的 C 结构。

在工作中,仅此一点就足以让我实现 Protobuf 替代系统,因为我们真的想要工会。

  • 也许检查 https://developers.google.com/protocol-buffers/docs/proto#oneof 的联合 (4认同)