gpt4 book ai didi

Linux 的 C++ 对象序列化

转载 作者:太空狗 更新时间:2023-10-29 11:30:39 25 4
gpt4 key购买 nike

我正在做一个需要通过网络发送和接收数据的程序。我从来没有处理过对象序列化。我阅读了有关 Boost 和 Google Protocol Buffers 的一些建议。对于在 Linux 中使用哪个最好?

如果您认识其他人,我将感谢您的帮助。

谢谢。

最佳答案

我用过 Boost.Serialization序列化对象并通过套接字传输它们。这是一个非常灵活的库,如果您有权访问对象,则可以对其进行侵入式序列化

class Foo
{
public:
template<class Archive>
void serialize(Archive& ar, const unsigned int version)
{
ar & _foo;
ar & _bar;
}

int _foo;
int _bar;
};

或者如果您无权访问需要序列化的对象,则采用非侵入式

namespace boost {
namespace serialization {

template<class Archive>
void serialize(Archive& ar, Foo& f, const unsigned int version)
{
ar & f._foo;
ar & f._bar;
}

} // namespace serialization
} // namespace boost

如果 Foo 不公开其成员(此处为 _foo_bar),则有序列化 Foo 的技巧,documentation很好地解释了这一点。要序列化 ​​Foo,您可以使用 boost::archive 命名空间中的对象:文本、二进制或 xml。

std::stringstream ss;
boost::archive::text_oarchive ar( ss );
Foo foo;
foo._foo = 1;
foo._bar = 2;
ar << foo;

像这样将存档重建为 Foo 对象

boost::archive::text_iarchive ar( ss );
Foo foo
ar >> foo;

请注意,此示例相当简单,显然,当您介绍网络时,您将使用套接字和缓冲区。

关于Linux 的 C++ 对象序列化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3182224/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com