我正在学习使用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,该主类的标头具有
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);
主要.cpp
BOOST_CLASS_EXPORT_IMPLEMENT(Main);
当我试图编译这个代码时,我得到了以下错误:
C: \Users\boost1470_win64_vc90sp1\include\boost/archive/detail/check.hpp(162):错误C2027:使用未定义的类型"boost::STATIC_ASSERTION_FAILURE"具有[x=错误]
C: \Users\boost1470_win64_vc90sp1\include\boost/archive/detail/iserializer.hpp(577):请参阅正在编译的函数模板实例化"void boost::archive::detail::check_const_loading(void)"的参考具有[T=常量长
C: \Users\interfaces/Interface.h(12):请参阅功能模板实例化的参考文件"归档和;boost::archive::detail::interface_iarchive::operator&(T&)'正在编译具有[Archive=boost::Archive::text_iarchive,T=常量长]
C: \Users\interfaces/Interface.h(17):请参阅对正在编译的类模板实例化"boost::archive::detail::extra_detail::guid_initifier"的引用具有[T=X]
知道出了什么问题吗。我是一个新来推动和弄清楚这是如何工作的人。
注意:如果我在结构中使用int而不是long,我不会看到boost::STATIC_ASSERTION_FAILURE错误。
澄清上面的注释
struct X {
const Long rate;
}
问题是,一旦X被实例化,速率就被设置为一个恒定值,boost无法改变它。如果它读取
struct X {
Long rate;
}
你的代码工作吗?