下面是示例代码,其中我尝试使用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的方式,如果有的话,那将非常有帮助。
由于
答案 0 :(得分:1)
你无需做任何事。
对于声明它们的类型, my_time
和data_type
是别名。
Boost序列化内置了对std::string
和int
的支持,并且不会看到差异。
相关信息:
查看 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