2011-10-21 6 views
2

ブーストシリアル化を使用して、Plain-old-Dataタイプでシンプルなクラスをシリアライズしようとしています。しかし、私の唯一の要件は、RTTIを使用できないことです。したがって、最新のBoost 1.47ライブラリを備えたARM Linux用のgcc 4.4.1を使用して-fno-rttiでコンパイルしています。だからここブースト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) {} 
}; 

私もまだ実際のセーブとロードの機能を実装していない(彼らはブーストのドキュメントを見てからかなり簡単であるように見える)が、私はすでに取得しています次のコンパイラエラー:

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/serialization/extended_type_info_no_rtti.hppを含む)を使用して可能性がありますように思われるが、私は新しいブーストユーザーであり、

PS:-fno-rttiを削除すると、コードが正常にコンパイルされます。

+0

を、コンパイラは、もはや標準準拠ではありません。結果が何であるか分からない限り、それをしないでください。 –

+0

応答をありがとう、私はboost :: serializeを使用する場合は、私はちょうどrttiを有効にする必要がありますと仮定します。 –

答えて

関連する問題