在RTTI关闭的情况下提升简单类的序列化(-fno-rtti)

时间:2011-10-21 23:15:40

标签: c++ serialization boost g++ rtti

我正在尝试使用boost序列化序列化具有Plain-old-Data类型的简单类。但是,我唯一的要求是我不能使用RTTI。因此,我使用gcc 4.4.1为ARM Linux编译-fno-rtti,使用最新的Boost 1.47库。

所以这是我的班级:

#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

所以...问题是,是否可以使用boost序列化序列化这个简单的类而不使用RTTI?我环顾四周似乎有可能使用一些增强宏和机器(#include&lt; boost / serialization / extended_type_info_no_rtti.hpp&gt;暗示这一点)但我是一个新的Boost用户,并且对如何使用非常无能为力继续。

PS:如果删除-fno-rtti,我的代码编译正常。

1 个答案:

答案 0 :(得分:1)