Повысьте сериализацию простого класса с выключенным RTTI (-fno-rtti) - PullRequest
2 голосов
/ 22 октября 2011

Я пытаюсь сериализовать простой класс с типами Plain-old-Data, используя расширенную сериализацию.Однако мое единственное требование - я не могу использовать RTTI.Таким образом, я компилирую с -fno-rtti, используя gcc 4.4.1 для ARM Linux с последней библиотекой 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 ссылается на это), но я новый пользователь Boost и совершенно не знаю, как действовать дальше.

PS: Мой код компилируется нормально, если я удаляю -fno-rtti.

1 Ответ

1 голос
/ 22 октября 2011
...