boost :: serialization :: traits的一个具体例子?

时间:2012-02-22 12:35:27

标签: c++ boost boost-serialization

考虑一个序列化的结构:

struct MyStruct {
   int a;
   std::string b;

template<class Archive>
void serialize(Archive &ar, const unsigned int)
   {
   ar & a & b;
   }
};

我希望使用boost :: serialization :: traits将其明确标记为track_neverobject_serializable。我盯着traits docs,但似乎无法理解如何应用它,并且无法在任何地方找到示例。所以......

a)将特征应用于此特定类的代码是什么?

b)验证每个问题的BOOST_STATIC_ASSERT()是什么?

c)我假设我不能创建这个类primitive_type,因为在典型的归档类中没有成员函数或模板可以直接处理这种类型。正确的吗?

我不关心跨平台或跨版本的存档兼容性,只需快速读取(和写入)并且干扰MyStruct即可,但如果可能的话,看到它完成两种方式会很好

1 个答案:

答案 0 :(得分:2)

由于MyStruct不是用于应用特征的模板化结构或类,所以您需要使用BOOST_CLASS_IMPLEMENTATIONBOOST_CLASS_TRACKING宏:

在课程定义之外,您需要编写以下两行:

BOOST_CLASS_IMPLEMENTATION(MyStruct, boost::serialization::object_serializable);
BOOST_CLASS_TRACKING(MyStruct, boost::serialization::track_never);

一个BOOST_STATIC_ASSERT()来验证你做的是正确的事情:

BOOST_STATIC_ASSERT(boost::serialization::implementation_level<MyStruct>::value 
                    == boost::serialization::object_serializable);
BOOST_STATIC_ASSERT(boost::serialization::tracking_level<MyStruct>::value 
                    == boost::serialization::track_never);

我认为将它设为原始类型是没有意义的,因为它不是原始类型。