![](/img/trans.png)
[英]In Boost serialization,boost_shared pointer does not compile.. give error
[英]boost serialization for void* pointer type does not compile
我需要序列化一个简单的结构,它有一个 void * 类型的指针,但是当我序列化时它给出错误“C2338: boost::serialization::tracking_level< T >::value != boost::serialization::track_never”指向shared_ptr.hpp 在第 167 行。 下面是代码
#include <boost/serialization/access.hpp>
#include <boost/serialization/base_object.hpp>
#include <boost/serialization/optional.hpp>
#include <boost/serialization/map.hpp>
#include <boost/serialization/shared_ptr.hpp>
struct Man
{
Man();
virtual ~Man();
std::list<boost::shared_ptr<void *>> condition;
private:
friend class boost::serialization::access;
template<class Archive>
void serialize(Archive &ar, const unsigned int version)
{
ar & condition; // if i comment this line.. issue goes away..
}
};
struct SuperMan
{
public:
SuperMan(void);
SuperMan(const parameter_strings & parms);
virtual ~SuperMan(void);
boost::optional<anyURI> detail;
boost::optional<SuperManInfo> SuperMan_info;
private:
friend class boost::serialization::access;
template<class Archive>
void serialize(Archive &ar, const unsigned int version)
{
ar & SuperMan_info;
ar & detail;
}
};
确实 boost 支持 void* 指针的序列化,如果是的话.. 成员变量是否以错误的方式序列化?
No Boost Serialization 不支持void*
的序列化。 原因很简单,没有类型信息,所以它不可能知道应该序列化什么。
对指针恰好具有的值进行序列化是完全没有用的,因为在大多数平台上,这只是正在运行的进程上下文中的临时地址,当您读回它时,该值将毫无意义。
出于这个原因, shared_ptr<void*>
也是一个无用的想法。 (除非void*
实际上是某种不透明的 HANDLE,并且您使用自定义删除器来释放与该句柄对应的资源: 零规则文章)。
所以,找出你的condition
集合中的真正内容。 修复类型以反映这一点,或手动修复序列化代码以强制转换,否则强制将相关数据包含在存档中。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.