【发布时间】:2015-03-06 15:05:37
【问题描述】:
此问题与列为重复的问题不同: Boost c++ serializing a char * 我没有使用 shared_ptr,并且我可以完全访问我的课程的内部。
我能找到的最接近的响应是在Store a vector of pointers to custom objects to file 中,我通过搜索编译器错误找到了它。
但是,那里给出的答案并不清楚,至少对我来说不是。它指向 boost 文档,这表明我在这里列出的简单代码应该可以工作。在对通过指针序列化对象的所有内务进行分类之后,boost 文档这样说。
此序列化库解决了上述所有注意事项。
如果我必须一次写入一个 char[] 一个字符,或者如果我必须取消引用容器中的所有指针对象并将它们分解为它们的组成 POD 部分,首先将它们的大小以字节为单位写入流,以便用boost序列化,那么使用boost似乎没有多大意义。这是工作的最大份额。创建一个文本输出流并将字节注入其中是微不足道的。
我并不是说我可能对文档有阅读理解问题,但根据我对所读内容的理解,下面的代码 sn-p 应该可以工作。但是,此代码会发出以下编译器错误。所以,我一定是遗漏了一些东西,但我就是看不到它,所以这就是我寻求帮助的原因。
在下面的代码sn-p中简单指出故障点怎么样?或者,更好的是,提供一个有效的 sn-p?
/usr/include/boost/serialization/access.hpp:118:9: error: ‘class boost::ptr_vector<std::basic_string<char> >’ has no member named ‘serialize’
t.serialize(ar, file_version);
^
#include <fstream>
#include <boost/archive/text_oarchive.hpp>
#include <boost/archive/text_iarchive.hpp>
class A {
public:
A(){}
char c;
char *name;
friend boost::serialization::access;
template<class Archive>
void serialize(Archive& ar, unsigned version)
{
ar & name;
}
};
main()
{
A a;
a.name = (char *)"this is a test";
std::ofstream ofs("table.txt");
boost::archive::text_oarchive os(ofs);
os << a;
}
我可以序列化 int、char 甚至 STL 类型,但我不能用指针序列化任何东西。比如我可以序列化std::vector<std::string>,但是如果我尝试序列化std::vector<std::string *>,就会得到编译错误。
【问题讨论】:
-
@Mr.Kbok 我也在做同样的事情。 \@OP 这对你来说看起来像 HTML 吗?你能“运行 sn-p”吗?
-
您能提供原始答案的链接吗?我找不到它。
-
它打印在顶部:i.imgur.com/b7hVWxj.png 如果之前显示页面时出现某种错误,您可能需要刷新浏览器。
-
哦,好吧。答案就在链接的副本中 - 如果您正在寻找它。我在这里写了一个答案。我同意“替代案例”在该答案中并不是特别出色,但话又说回来,无论如何,由于我的回答中证明的原因,没有人应该推荐。
-
回复。 “简单地指出下面代码 sn-p 中的故障点怎么样?或者,更好的是,提供一个可以工作的 sn-p?” - 你如何意识到人们可能没有时间?我向您指出了现有的答案,假设您阅读了它的含义,并希望您能在 4 小时前得到答案。你没有有权得到答案。我试图提供帮助。
标签: c++ serialization boost