在进程之间和跨网络序列化 C++ 类
Serialize C++ classes between processes and across the network
我想了解如何在进程之间或通过网络传输 C++ class 的内容。
我正在阅读 Google Protobuf 教程:
https://developers.google.com/protocol-buffers/docs/cpptutorial
看来您必须创建一个抽象的非 C++ 接口来表示您的 class:
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++ 代码(而不是抽象)来指定我的 class,并且只添加类似 serialize()
和 deserialize()
方法的内容。
Google Protobuf 可以吗?或者这就是 Protobuf 的工作方式,我需要使用不同的序列化技术吗?
更新
这样做的原因是我不想维护两个接口。我宁愿有一个 C++ class,更新它而不必担心第二个 .proto
interface/definition。代码可维护性。
这就是 Protobuf 的工作原理。如果你想序列化你手动编写的 C++ 类,你必须使用其他东西。但是,我不确定你 真的 想要那个,因为你将不得不将自己限制在没有不变量的非常简单的字段(就像在 Protobuf 中一样)或编写自定义 (de)序列化逻辑自己。
您可以制作一个简单的协议缓冲区来保存二进制信息,但它有点破坏了使用协议缓冲区的意义。
您可以通过使用 SerializeToString() 和 ParseFromString() 简单地将二进制信息序列化为字符串来欺骗系统。
还有 SerializeToOstream() 和 ParseFromIstream()。
protocol buffers 的真正价值在于能够在使用单一定义的同时跨程序、系统和语言使用消息。如果您不使用他们定义的协议发送消息;这比简单地使用本机 C++ 功能更有效。
我想了解如何在进程之间或通过网络传输 C++ class 的内容。
我正在阅读 Google Protobuf 教程:
https://developers.google.com/protocol-buffers/docs/cpptutorial
看来您必须创建一个抽象的非 C++ 接口来表示您的 class:
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++ 代码(而不是抽象)来指定我的 class,并且只添加类似 serialize()
和 deserialize()
方法的内容。
Google Protobuf 可以吗?或者这就是 Protobuf 的工作方式,我需要使用不同的序列化技术吗?
更新
这样做的原因是我不想维护两个接口。我宁愿有一个 C++ class,更新它而不必担心第二个 .proto
interface/definition。代码可维护性。
这就是 Protobuf 的工作原理。如果你想序列化你手动编写的 C++ 类,你必须使用其他东西。但是,我不确定你 真的 想要那个,因为你将不得不将自己限制在没有不变量的非常简单的字段(就像在 Protobuf 中一样)或编写自定义 (de)序列化逻辑自己。
您可以制作一个简单的协议缓冲区来保存二进制信息,但它有点破坏了使用协议缓冲区的意义。
您可以通过使用 SerializeToString() 和 ParseFromString() 简单地将二进制信息序列化为字符串来欺骗系统。
还有 SerializeToOstream() 和 ParseFromIstream()。
protocol buffers 的真正价值在于能够在使用单一定义的同时跨程序、系统和语言使用消息。如果您不使用他们定义的协议发送消息;这比简单地使用本机 C++ 功能更有效。