我正在学习如何使用 boost 序列化一些 C++ 类。
我有一个结构体在一个接口中。我使用 boost 序列化函数来序列化这个结构体,像这样:
Interface.h
struct X {
const Long rate;
}
template <class Archive>
void serialize(Archive& ar, uint32 version)
{
ar & this->rate;
}
BOOST_CLASS_EXPORT(X);
现在这个头文件将被我的主类使用。假设是main.cpp, 这个主类的头文件是Main.h。
#include "Interface.h"
class Main {
// some stuff
template <class Archive>
void serialize(Archive& ar, uint32 version);
X x;
friend class boost::serialization::access;
};
template <class Archive>
void
Main::serialize(Archive& ar, uint32 version)
{
ar & x;
}
BOOST_CLASS_EXPORT_KEY(Main);
Main.cpp
BOOST_CLASS_EXPORT_IMPLEMENT(Main);
当我尝试编译此代码时,出现以下错误:
C:\ Users \ boost1470_win64_vc90sp1 \ include \ boost / archive / detail / check.hpp(162):错误C2027:使用未定义的类型“boost :: STATIC_ASSERTION_FAILURE” 具有 [ x = false ]
C:\ Users \ boost1470_win64_vc90sp1 \ include \ boost / archive / detail / iserializer.hpp(577):查看正在编译的函数模板实例化“void boost :: archive :: detail :: check_const_loading(void)” 具有 [ T = const Long ]
C:\ Users \ interfaces / Interface.h(12):查看正在编译的函数模板实例化“存档和boost :: archive :: detail :: interface_iarchive :: operator &(T&)” 具有 [ 存档= boost :: archive :: text_iarchive, T = const Long ]
C:\ Users \ interfaces / Interface.h(17):查看正在编译的类模板实例化“boost :: archive :: detail :: extra_detail :: guid_initializer” 具有 [ T = X ]
有什么想法是怎么出错了。我对boost不熟悉,正在弄清楚它是如何工作的。
注意:如果在结构中使用int而不是long,则不会看到boost :: STATIC_ASSERTION_FAILURE错误。
ar&make_nvp(“rate”,this->rate);
。文档:http://www.boost.org/doc/libs/1_59_0/libs/serialization/doc/wrappers.html#nvp,但仔细想想,Alan的评论最有可能是错误(`const_cast` 可能有所帮助)。 - alfC