【发布时间】:2011-11-15 15:02:53
【问题描述】:
在我当前的项目中,我有几个不同的接口需要我将消息序列化到字节缓冲区中。我觉得我做这件事的方式可能不会让真正的 C++ 程序员开心(我也愿意)。
我通常会这样做:
struct MyStruct {
uint32_t x;
uint64_t y;
uint8_t z[80];
};
uint8_t* serialize(const MyStruct& s) {
uint8_t* buffer = new uint8_t[sizeof(s)];
uint8_t* temp = buffer;
memcpy(temp, &s.x, sizeof(s.x));
temp += sizeof(s.x);
//would also have put in network byte order...
... etc ...
return buffer;
}
请原谅任何错别字,这只是我脑海中的一个例子。显然,如果我要序列化的结构具有内部指针,它会变得更加复杂。
所以,我有两个密切相关的问题:
假设我知道目标系统具有相同的字节序,通过将结构直接转换为字符缓冲区进行序列化,在上述特定场景中是否存在任何问题?
主要问题:有没有更好的……呃……C++?除了添加智能指针之外,还有什么方法可以做到这一点?我觉得这是一个常见的问题,STL 可能会处理它 - 如果没有,我相信无论如何使用 C++ 机制都有更好的方法。
编辑如果您可以使用标准 C++/STL 在不添加库的情况下以更好的方式序列化此结构的干净示例,则可加分。
【问题讨论】:
-
谷歌有一个Protocol Buffers
标签: c++ serialization