void*指针类型的Boost序列化无法编译
boost serialization for void* pointer type does not compile
我需要序列化一个简单的结构体,它有一个指针类型void *,但当我序列化它给出错误"C2338: boost::serialization::tracking_level
#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;
}
};
确实增强了对void*指针的序列化,如果是的话…
No Boost Serialization不支持void*
的序列化。原因很简单,因为没有类型信息,所以它不可能告诉应该序列化哪些。
序列化指针碰巧拥有的值是完全无用的,因为在大多数平台上,这只是运行进程上下文中的临时地址,当你读回它时,该值将毫无意义。
因此,shared_ptr<void*>
也是一个无用的想法。(除非,也许,void*
实际上是某种不透明的句柄,并且您使用自定义删除器来释放对应于该句柄的资源:零规则文章)。
所以,弄清楚你的condition
集合中到底有什么。修复类型以反映这一点,或者手动修复序列化代码以强制在存档中包含相关数据。
相关文章:
- 如何在C++中序列化结构数据
- 序列化,没有库的整数,得到奇怪的结果
- 如何知道QDataStream不能反序列化某些内容
- 如何使用Python从C++中读取谷物序列化数据
- 如何使用boost::具有嵌套结构和最小代码更改的序列化
- 带有Protobuf序列化的C++Hazelcast:字符串不是UTF-8格式的
- 自定义对象的dlib序列化在gcc中失败
- 在C++中序列化浮点数/双精度,编译为 WebAssembly
- 提升 XML 序列化在编译期间失败
- 如何设计可序列化类以使任何非序列化属性都会导致编译时错误
- Sig 11在使用-icpc v12使用-static和-openmp编译时使用boost序列化
- 对具有不可复制值的 stl 容器使用提升序列化时出现编译错误
- 使用boost::序列化与库链接时需要大量编译时间
- Boost mpl::list变量序列化check_const_loading()编译错误
- Boost序列化编译错误
- 具有可序列化嵌套类的类的序列化奇怪的编译错误
- boost序列化的编译错误
- void*指针类型的Boost序列化无法编译
- c++Boost序列化,编译派生类时出错
- 在Boost序列化中,boost_shared指针不会编译.给错误