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

Google-protobuf: How to create unions using Google protocol buffer

我目前正在尝试使用 Google 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;
}

我希望在编译时生成一个 union 但生成的结构如下:

struct _msgToSend
{
 ProtobufCMessage base;
 Type msg_type;
 ReqMsg1 msg1;
 ReqMsg2 msg2;
}

我认为你做不到。

在 Protobuf 中 "optional" 并不像 C 联合那样意味着 "it's either this or this other";这意味着 "this might be here"。这就是为什么你得到一个可以表达两个可选字段的 C 结构。

在工作中,仅此一项就足以让我实现 Protobuf 替换系统,因为我们真的需要联合。

在 protobuf 中有一个专门的结构(不过我在 C++ 中使用它,不确定它是否可以在纯 C 中工作):

message MyUnion {
    oneof MyUnionOneof {
        bool booleanValue = 1;
        string stringValue = 2;
    }
}

看看这个 link:https://developers.google.com/protocol-buffers/docs/proto#oneof