我目前正在尝试使用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;
}我希望上面在编译时生成一个union,但生成的结构如下所示:
struct _msgToSend
{
ProtobufCMessage base;
Type msg_type;
ReqMsg1 msg1;
ReqMsg2 msg2;
}发布于 2016-03-10 20:41:46
我觉得你做不到。
在Protobuf中,"optional“并不意味着”要么这样,要么那样“,就像C中的联合一样;它的意思是”这可能就在这里“。这就是为什么你会得到一个C结构,它可以同时表示两个可选的字段。
在工作中,仅仅这一点就足以让我实现一个Protobuf替换系统,因为我们真的想要工会。
发布于 2016-10-14 18:15:06
在protobuf中有一个专门的结构(虽然我在C++中使用它,但不确定它是否能在纯C中工作):
message MyUnion {
oneof MyUnionOneof {
bool booleanValue = 1;
string stringValue = 2;
}
}请查看此链接:https://developers.google.com/protocol-buffers/docs/proto#oneof
https://stackoverflow.com/questions/35916707
复制相似问题