使用struct中包含的typedef定义的本机类型的序列化

时间:2014-03-20 13:02:37

标签: c++ visual-studio-2012 serialization boost

我有一个MyFile.hpp头文件,其中包含各种类型和枚举。如何对给定的示例代码进行序列化/反序列化。

// MyFile.hpp

namespace A { 
   namespace B {

      typedef std::string MyString;
      typedef std::map<std::string,std::string> my_type;
      typedef bool result;

      struct MyTimer
      {
         int time;

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

      enum MODE
      {
          Sleep=1,
          HybridSleep,
          Hybernate
      }

   }
}

我需要在相应的MyFile.cpp中执行,但不知道如何继续。

谢谢,

1 个答案:

答案 0 :(得分:3)

地图,字符串等可以通过包含相关标题来序列化:

#include <boost/serialization/map.hpp>
#include <boost/serialization/string.hpp>

枚举counts as a primitive type:

  

当且仅当下列之一为真时,类型T才是可序列化的:

     
      
  • 它是一种原始类型。

         

    原始类型是指C ++内置类型,只有C ++内置类型。 算术(包括字符),bool,enum是原始类型。在序列化特征下面,我们以不同的方式为不同的目的定义“原始”实现级别。这可能是混乱的根源。

  •   
  • 这是一个类类型,根据下面详述的原型声明了以下之一:   
        
    • 一个类成员函数serialize
    •   
    • 全局函数序列化
    •   
  •   
  • 它是一个指向Serializable类型的指针。
  •   
  • 它是对Serializable类型的引用。
  •   
  • 它是Serializable类型的本机C ++数组。
  •   

对于更棘手的案例,有BOOST_STRONG_TYPEDEF(请参阅documentation "Serialization Wrappers"