我正在学习使用 boost 在 C++ 中对我的一些类进行序列化。
我在接口中有一个结构。我使用 boost serilaize 函数来像这样序列化这个结构。
接口.h
struct X {
const Long rate;
}
template <class Archive>
void serialize(Archive& ar, uint32 version)
{
ar & this->rate;
}
BOOST_CLASS_EXPORT(X);
现在这个标题将被我的主类使用。假设 main.cpp,这个主类的标题有
主文件
#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);
主文件
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) :请参阅使用 [ T= 编译的函数模板实例化 'void boost::archive::detail::check_const_loading(void)' 的引用常量长
C:\Users\interfaces/Interface.h(12) : 请参见使用 [ Archive=boost:: 编译的函数模板实例化 'Archive &boost::archive::detail::interface_iarchive::operator &(T &)' 的引用archive::text_iarchive, T=const Long ]
C:\Users\interfaces/Interface.h(17) : 请参阅使用 [ T=X ] 编译的类模板实例化 'boost::archive::detail::extra_detail::guid_initializer' 的参考
知道出了什么问题。我是新手,想了解它是如何工作的。
注意:如果我在结构中使用 int 而不是 long,我看不到 boost::STATIC_ASSERTION_FAILURE 错误。