我们如何在protobuf消息中放置变体消息(少数消息类型之一)?
message typeA {
....
}
message typeB {
....
}
message typeC {
[typeB|typeA] payload;
}
Run Code Online (Sandbox Code Playgroud)
Ken*_*rda 26
你需要这样做:
message TypeC {
optional TypeA a = 1;
optional TypeB b = 2;
}
Run Code Online (Sandbox Code Playgroud)
如果有很多变体,您可能还需要添加标记字段,这样就不必检查has_*()每个变体.
这在Protobuf文档中有所介绍:https: //developers.google.com/protocol-buffers/docs/techniques#union
PS.Protobufs的这个缺失功能在Cap'n Proto中得到修复,Cap'n Proto是同一作者(我)的新序列化系统:Cap'n Proto 为此目的实现了"联合".在离开Google之前,我还在Protobufs中实现了工会,但在我离开之前没有设法将我的更改合并到主线.抱歉.:(
编辑:看起来Protobuf团队最终合并了我的更改并发布了2.6.0版本.:)见的oneof声明.
yel*_*von 18
查看oneof2.6版中的新功能:https://developers.google.com/protocol-buffers/docs/reference/java-generated#oneof
你现在可以这样做:
message TypeC {
oneof oneof_name {
TypeA a = 1;
TypeB b = 2;
}
}
Run Code Online (Sandbox Code Playgroud)
相同的字段oneof将共享内存,并且只能同时设置一个字段.
| 归档时间: |
|
| 查看次数: |
16502 次 |
| 最近记录: |