boost序列化 - 使用不同命名空间中单个数据类型的load和save方法

时间:2014-04-04 06:00:43

标签: c++ serialization boost boost-serialization

下面是示例代码,其中我尝试使用boost进行序列化。 对于struct my_type,序列化方法已实现,但如何将my_time和data_type序列化为bcoz,它们位于不同的命名空间中

// MyData.hpp

namespace X { namespace Y {

struct my_type
{

      std::string a;
      double b;

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

   public:
       my_type();
       my_type(const parameter_strings & parms);

       virtual ~my_type();

};


namespace Z
{
    typedef unsigned int my_time;
    typedef std::string data_type;
}


}
}

// MyData.cpp

#include <MyData.hpp>

my_type:: my_type()
{
}

my_type::~ my_type()
{
}

 my_type:: my_type(const parameter_strings & parms)
{   
    // implemetation
}

由于my_time和data_type不在任何类或结构中,因此我不知道如何序列化它。 我应该在MyData.cpp文件中序列化my_time和data_type的方式,如果有的话,那将非常有帮助。

由于

1 个答案:

答案 0 :(得分:1)

你无需做任何事。

对于声明它们的类型,

my_timedata_type别名

Boost序列化内置了对std::stringint的支持,并且不会看到差异。

相关信息:

查看 Live On Coliru

#include <boost/archive/text_oarchive.hpp>
#include <boost/serialization/serialization.hpp>

namespace X { namespace Y {

    struct my_type {
        std::string a;
        double b;

    private:
        friend class boost::serialization::access;
        template<class Archive>
        void serialize(Archive &ar, unsigned) {
            ar & a;
            ar & b;
        }

    public:
        my_type(){}
        virtual ~my_type(){}
    };


    namespace Z
    {
        typedef unsigned int my_time;
        typedef std::string data_type;
    }

} }

#include <iostream>

int main()
{
    boost::archive::text_oarchive oa(std::cout);
    X::Y::my_type a;
    a.a = "in my_type";
    a.b = 3.14;
    X::Y::Z::my_time b = 42;
    X::Y::Z::data_type c = "hello world";

    oa << a << b << c;
}

打印

22 serialization::archive 10 0 0 10 in my_type 3.1400000000000001 42 11 hello world