gpt4 book ai didi

c++ - Boost C++ 序列化一个 char *

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:08:48 25 4
gpt4 key购买 nike

我有一个类,我正在尝试序列化一个 shared_ptr,但序列化对象的常规方法不起作用:

class Object {
public:
Object();
~Object();

shared_ptr<char>objectone;

friend class boost::serialization::access;
template <typename Archive>
void serialize(Archive &ar, const unsigned int version)
{
ar & objectone;
}
};

我什至尝试过这种方式,但它仍然不起作用:

    void serialize(Archive &ar, const unsigned int version)
{
for (int i = 0; i < (strlen(objectone.get())); i++)
ar & objectone.get()[i];
}

有什么想法可以解决这个问题吗?谢谢。

一些额外的信息:

我已经包含了两个 shared_ptr 头文件:

#include <boost/serialization/shared_ptr.hpp>
#include <boost/serialization/shared_ptr_132.hpp>

我试图转换为字符串并以这种方式序列化它,但它会产生以下错误:boost::archive::archive_exception' what(): 流错误

friend class boost::serialization::access;
template <typename Archive>
void serialize(Archive &ar, const unsigned int version)
{
if (objectone.get()) {
string temp(objectone.get());
ar & temp;
}
ar & objectone;
}

最佳答案

您的代码不止一个问题。

首先,shared_ptr 不是用来保存数组的。停止这样做。

其次,据我所知,序列化库不保存 C 风格的字符串。这将很难实现并且基本上毫无意义,因为您可以保存 vectorstring,无论如何您都应该使用它们。

如果你真的坚持要保留一个char* 字符串,那么你需要将它转换成一个vector/string,并保存它。然后在阅读时你需要读回 vector/string ,获取大小,分配内存,将其插入......等......指针跟踪将不起作用,所以如果你依靠它,您必须自己实现它。玩得开心。

新代码编辑:

您正在一个包含保存和加载的函数中执行保存位操作。它当然不能很好地加载。您需要拆分序列化。 if (Archive::is_saving) 也不起作用。 boost 文档解释了如何正确拆分序列化例程。

关于c++ - Boost C++ 序列化一个 char *,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5094750/

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