我必须序列化包含std::queue
的{{1}}。变体大约有20种不同的结构。
在proto3中表示变体的更好/更好的方法是什么?我的意思是,我应该使用boost::variant
还是oneof
?
他们的表现如何?
我不问该怎么做,我不知道什么是最佳解决方案。
答案 0 :(得分:0)
从相反的方向开始。您编写一个.proto文件,该文件定义(使用Google的protobuf模式语言)您要定义的“消息”。其中之一可以是包含许多其他内容的“一个”。然后,您使用Protocol Buffers编译器编译该.proto文件,最后得到C ++源代码,该源代码将这些消息实现为从基类库派生的C ++类。这些类具有内置的序列化例程。您绝对不会使用Boost或手写的C ++类。
Boost :: variant很可能等同于protobuf的“ oneof”,但是您不会用它包含不同的protobuf消息,因为这就是“ oneof”为您服务的内容。将Boost ::: variant与GPB自己的处理方式混合在一起可能会要求混淆代码。