Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/140.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ boost::serialization::traits的一个具体示例?_C++_Boost_Boost Serialization - Fatal编程技术网

C++ boost::serialization::traits的一个具体示例?

C++ boost::serialization::traits的一个具体示例?,c++,boost,boost-serialization,C++,Boost,Boost Serialization,考虑要序列化的结构: struct MyStruct { int a; std::string b; template<class Archive> void serialize(Archive &ar, const unsigned int) { ar & a & b; } }; struct MyStruct{ INTA; std::字符串b; 模板 无效序列化(存档和ar,常量unsigned int) { 应收账款和应

考虑要序列化的结构:

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

template<class Archive>
void serialize(Archive &ar, const unsigned int)
   {
   ar & a & b;
   }
};
struct MyStruct{
INTA;
std::字符串b;
模板
无效序列化(存档和ar,常量unsigned int)
{
应收账款和应付账款;
}
};
我想使用boost::serialization::traits显式地将其标记为
track\u never
object\u serializable
。我一直在关注这个问题,但似乎无法思考如何应用它,在任何地方都找不到一个例子。所以

a) 将特性应用于这个特定类的代码是什么

b) 验证每种方法是否到位的
BOOST\u STATIC\u ASSERT()
是什么

c) 我假设我不能使这个类成为基本类型,因为在一个典型的归档类中没有可以直接处理这个类型的成员函数或模板。对吗


我不关心跨平台或跨版本存档的兼容性,只需要快速读取(和写入)和侵入
MyStruct
就可以了,但如果可能的话,最好能看到两种方法都能实现。

因为MyStruct不是一个模板化的结构或类来应用特性,您所需要做的就是使用和宏:

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

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);
BOOST\u STATIC\u ASSERT(BOOST::serialization::implementation\u level::value)
==boost::serialization::object_serializable);
BOOST\u STATIC\u ASSERT(BOOST::serialization::tracking\u level::value)
==boost::serialization::track\u never);

我想说,将其设为基元类型是没有意义的,因为它不是基元类型。

事实证明,上述两个宏必须完全按照您设置的顺序。我把它们倒过来了,这就是为什么它对我不起作用。末端不需要分号,但不会造成伤害。(顺便说一下,这都是MinGW-32/gcc-4.4。)