C++ void*指针类型的boost序列化未编译

C++ void*指针类型的boost序列化未编译,c++,serialization,boost,boost-serialization,C++,Serialization,Boost,Boost Serialization,我需要序列化一个具有void*类型指针的简单结构,但当我序列化时,它会给出错误“C2338:boost::serialization::tracking_level::value!=boost::serialization::track_never”,指向第167行的shared_ptr.hpp。下面是代码 #include <boost/serialization/access.hpp> #include <boost/serialization/base_object.hp

我需要序列化一个具有void*类型指针的简单结构,但当我序列化时,它会给出错误“C2338:boost::serialization::tracking_level::value!=boost::serialization::track_never”,指向第167行的shared_ptr.hpp。下面是代码

#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;
      } 

   };
#包括
#包括
#包括
#包括
#包括
建筑工人
{
人();
虚拟人();
std::列表条件;
私人:
好友类boost::serialization::access;
模板
无效序列化(存档和ar,常量未签名整数版本)
{
ar&condition;//如果我对这行进行注释..问题就会消失。。
} 
};
结构超人
{
公众:
超人(虚空);
超人(常数参数_字符串和参数);
虚拟超人(虚空);
boost::可选细节;
boost::可选超人信息;
私人:
好友类boost::serialization::access;
模板
无效序列化(存档和ar,常量未签名整数版本)
{
ar&超人信息;
应收账款&细节;
} 
};

boost真的支持void*指针的序列化吗?如果是。。成员变量的序列化方式是否错误?

无Boost序列化不支持对
void*
的序列化。原因很简单,因为没有类型信息,所以它不可能告诉应该序列化什么

序列化指针恰好具有的值是完全无用的,因为在大多数平台上,这只是运行进程上下文中的一个临时地址,当您读回它时,该值将毫无意义

出于这个原因,
shared\u ptr
也是一个无用的想法。(除非,
void*
实际上是某种不透明句柄,并且您使用自定义删除程序释放与该句柄对应的资源:)


所以,找出你的
条件中真正的
集合。修复类型以反映这一点,或者手动修复要强制转换的序列化代码,否则将强制在存档中包含相关数据。

假设这是您的真实代码:如果您希望能够序列化该变量,您必须以某种方式告诉boost::serialization
void*
实际上也指向了什么。从序列化的角度来看,它是一个泛型指针,不知道如何处理它。如果这是一个例子(我希望是,因为共享是一个糟糕的想法),那么我们需要更多的信息。条件需要指向X类型的变量。我们可以像使用共享的ptr条件一样使用它,然后将其序列化吗