考虑一个序列化的结构:
struct MyStruct {
int a;
std::string b;
template<class Archive>
void serialize(Archive &ar, const unsigned int)
{
ar & a & b;
}
};
我希望使用boost :: serialization :: traits将其明确标记为track_never
和object_serializable
。我盯着traits docs,但似乎无法理解如何应用它,并且无法在任何地方找到示例。所以......
a)将特征应用于此特定类的代码是什么?
b)验证每个问题的BOOST_STATIC_ASSERT()
是什么?
c)我假设我不能创建这个类primitive_type,因为在典型的归档类中没有成员函数或模板可以直接处理这种类型。正确的吗?
我不关心跨平台或跨版本的存档兼容性,只需快速读取(和写入)并且干扰MyStruct
即可,但如果可能的话,看到它完成两种方式会很好
答案 0 :(得分:2)
由于MyStruct
不是用于应用特征的模板化结构或类,所以您需要使用BOOST_CLASS_IMPLEMENTATION和BOOST_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);
我认为将它设为原始类型是没有意义的,因为它不是原始类型。