4

我正在学习使用 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 错误。

4

1 回答 1

1

澄清上面的评论

struct X {
    const Long rate;
}

问题是,一旦 X 被实例化,rate 被设置为一个常数值,而 boost 无法改变它。相反,如果它读取

struct X {
    Long rate;
}

你的代码有效吗?

于 2014-02-23T00:12:55.780 回答