【发布时间】:2019-04-26 05:32:10
【问题描述】:
我必须序列化包含boost::variant 的std::queue。 Variant 有大约 20 种不同的结构。
在 proto3 中表示变体的更好/首选方式是什么?我的意思是,我应该使用oneof 还是any?
他们的表现如何?
我不问该怎么做,我不知道什么是最好的解决方案。
【问题讨论】:
标签: c++ serialization boost protocol-buffers variant
我必须序列化包含boost::variant 的std::queue。 Variant 有大约 20 种不同的结构。
在 proto3 中表示变体的更好/首选方式是什么?我的意思是,我应该使用oneof 还是any?
他们的表现如何?
我不问该怎么做,我不知道什么是最好的解决方案。
【问题讨论】:
标签: c++ serialization boost protocol-buffers variant
你从相反的方向开始。您编写一个 .proto 文件,该文件定义(在 Google 的 protobuf 模式语言中)您希望定义的“消息”。其中之一可以是包含许多其他内容的“一个”。然后,您使用 Protocol Buffers 编译器编译该 .proto 文件,最终得到将这些消息实现为从基类库派生的 C++ 类的 C++ 源代码。这些类具有内置的序列化例程。您决不使用 Boost 或手写 C++ 类。
Boost::variant 很可能等同于 protobuf 的 'oneof',但您不会使用它来包含不同的 protobuf 消息,因为这就是 'oneof' 为您所做的。将 Boost::variant 与 GPB 自己的做事风格混合使用可能会导致代码混乱。
【讨论】: