【问题标题】:Boost Serialization of simple class with RTTI turned Off (-fno-rtti)在关闭 RTTI 的情况下提升简单类的序列化 (-fno-rtti)
【发布时间】: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


【解决方案1】:

【讨论】:

  • 看起来它从未实现过 AFAIK。
  • 请至少提供链接内容的摘要,以防链接失效。
猜你喜欢
  • 1970-01-01
  • 2018-06-05
  • 2016-04-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-02-02
  • 1970-01-01
相关资源
最近更新 更多