boost::serialization::traits 的具体例子?
Posted
技术标签:
【中文标题】boost::serialization::traits 的具体例子?【英文标题】:A concrete example of boost::serialization::traits? 【发布时间】:2012-02-22 12:35:26 【问题描述】:考虑一个结构来序列化:
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
是可以的,但如果可能的话,很高兴看到它以两种方式完成。
【问题讨论】:
【参考方案1】:由于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);
我会说将其设为原始类型是没有意义的,因为它不是原始类型。
【讨论】:
事实证明,以上两个宏需要完全按照您放置它们的顺序。我把它们颠倒了,这就是为什么它对我不起作用。最后的分号不是必需的,但没有害处。 (顺便说一下,这都是 MinGW-32/gcc-4.4。)以上是关于boost::serialization::traits 的具体例子?的主要内容,如果未能解决你的问题,请参考以下文章