【发布时间】:2011-12-12 23:10:21
【问题描述】:
我正在尝试使用 boost 序列化来序列化一个具有普通旧数据类型的简单类。但是,我唯一的要求是不能使用 RTTI。因此,我正在使用带有最新 Boost 1.47 库的 ARM Linux 的 gcc 4.4.1 使用 -fno-rtti 进行编译。
这是我的课:
#include <boost/archive/xml_oarchive.hpp>
#include <boost/archive/xml_iarchive.hpp>
class libNemoMemento
{
friend class boost::serialization::access;
private:
template<class Archive>
void serialize(Archive & ar, const unsigned int version)
{
ar & BOOST_SERIALIZATION_NVP(temperature);
ar & BOOST_SERIALIZATION_NVP(voltage);
ar & BOOST_SERIALIZATION_NVP(bandwidth);
ar & BOOST_SERIALIZATION_NVP(power);
}
int temperature;
unsigned int voltage;
unsigned int bandwidth;
unsigned char power;
public:
libNemoMemento(void) {}
virtual ~libNemoMemento(void) {}
};
我什至还没有实现实际的保存和加载功能(从 Boost 文档来看,它们似乎很简单),但我已经收到以下编译器错误:
In file included from /home/me/prebuild/third-party/boost/include/boost/serialization/detail/shared_ptr_132.hpp:29,
from /home/me/third-party/boost/include/boost/serialization/shared_ptr_132.hpp:35,
from /home/me/third-party/boost/include/boost/archive/shared_ptr_helper.hpp:29,
from /home/me/third-party/boost/include/boost/archive/xml_iarchive.hpp:133,
from serialize_test.h:21,
from serialize_test.cpp:15:
/home/me/third-party/boost/include/boost/serialization/detail/shared_count_132.hpp: In member function 'virtual void* boost_132::detail::sp_counted_base_impl<P, D>::get_deleter(const std::type_info&)':
/home/me/third-party/boost/include/boost/serialization/detail/shared_count_132.hpp:274: error: cannot use typeid with -fno-rtti
In file included from /home/me/prebuild/third-party/boost/include/boost/serialization/shared_ptr_132.hpp:35,
from /home/me/prebuild/third-party/boost/include/boost/archive/shared_ptr_helper.hpp:29,
from /home/me/prebuild/third-party/boost/include/boost/archive/xml_iarchive.hpp:133,
from serialize_test.h:21,
from serialize_test.cpp:15:
/home/me/prebuild/third-party/boost/include/boost/serialization/detail/shared_ptr_132.hpp: In function 'D* boost_132::get_deleter(const boost_132::shared_ptr<U>&)':
/home/me/prebuild/third-party/boost/include/boost/serialization/detail/shared_ptr_132.hpp:465: error: cannot use typeid with -fno-rtti
make: *** [all] Error 1
所以.. 问题是,是否可以在不使用 RTTI 的情况下使用 boost 序列化来序列化这个简单的类?我环顾四周,似乎可以使用一些 boost 宏和机器(#include 暗示了这一点),但我是一个新的 Boost 用户,对如何继续一无所知。
PS:如果我删除 -fno-rtti,我的代码编译得很好。
【问题讨论】:
-
关闭 RTTI 后,编译器不再符合标准。除非您知道后果是什么,否则不要这样做。
-
感谢您的回复,如果我想使用 boost::serialize,我想我只需要启用 rtti。
标签: c++ serialization boost g++ rtti