我想了解如何在进程之间或网络之间传输C++类的内容。
我正在阅读Google Protobuf教程:
https://developers.google.com/protocol-buffers/docs/cpptutorial
似乎您必须创建一个抽象的、非C++接口来表示您的类:
syntax = "proto2";
package tutorial;
message Person {
optional string name = 1;
optional int32 id = 2;
optional string email = 3;
enum PhoneType {
MOBILE = 0;
HOME = 1;
WORK = 2;
}
}但是,我更喜欢通过C++代码(而不是抽象)来指定类,只需要添加类似serialize()和deserialize()方法的内容。
谷歌Protobuf有可能做到这一点吗?或者这就是Protobuf的工作原理,我需要使用不同的序列化技术吗?
更新
原因是我不想维护两个接口。我希望有一个C++类,更新它,而不必担心第二个.proto接口/定义。代码可维护性
发布于 2021-04-29 22:39:08
这就是Protobuf的工作原理。如果要序列化手工编写的C++类,则必须使用其他方法。但是,我不确定您是否真的想要这样做,因为这样您就必须将自己限制在没有不变量的非常简单的字段中(就像Protobuf中的那样),或者自己编写自定义(反)序列化逻辑。
发布于 2021-04-29 22:44:07
您可以制作一个简单的协议缓冲区来保存二进制信息,但是它有点不符合使用协议缓冲区的要求。
您可以使用SerializeToString()和ParseFromString()简单地将二进制信息序列化为字符串,从而欺骗系统。
还有SerializeToOstream()和ParseFromIstream()。
协议缓冲区的真正价值在于能够在使用单个定义的同时跨程序、系统和语言使用消息。如果您没有使用他们定义的协议来创建消息,这比简单地使用本地C++功能要做的更多。
https://stackoverflow.com/questions/67325883
复制相似问题