2016-07-02 5 views
0

私はオブジェクトを記録するためにboost :: serializationを使う方法を学ぼうとしています。例えば、私は、オブジェクトをシリアル化するために、次のコードを使用しています:boost :: serializationのnvpラッパーを指定する方法は?

struct Abc 
{ 
    int a; 
    float b; 
    double c; 
}; 

namespace boost 
{ 
    namespace serialization 
    { 
     template <typename Archive> 
     void serialize(Archive& ar, Abc &obj,const unsigned int version) 
     { 
      ar & BOOST_SERIALIZATION_NVP(obj.a); 
      ar & BOOST_SERIALIZATION_NVP(obj.b); 
      ar & BOOST_SERIALIZATION_NVP(obj.c); 
     }; 

    } 
}; 

    Abc kkk; 

    std::ofstream ofs(tmpFile); 

    boost::archive::xml_oarchive ar(ofs); 

    ar & kkk; 
    ofs.close(); 

を私はコードをコンパイルするときしかし、私は次のコンパイル・エラーがあります。

Error 1 error C2664: 'boost::mpl::assertion_failed' : cannot convert parameter 1 from 'boost::mpl::failed ************boost::serialization::is_wrapper<T>::* ***********' to 'boost::mpl::assert<false>::type' \boost_1_50_0\boost\archive\basic_xml_oarchive.hpp 92 

エラーメッセージがソースにつながりますブーストコード:

template<class T> 
    void save_override(T & t, BOOST_PFTO int) 
    { 
     // If your program fails to compile here, its most likely due to 
     // not specifying an nvp wrapper around the variable to 
     // be serialized. 
     BOOST_MPL_ASSERT((serialization::is_wrapper<T>)); 
     this->detail_common_oarchive::save_override(t, 0); 
    } 

アイデアをお持ちですか?ありがとう。

答えて

3

あなたも、下NVPであなたのコード内でAbcのごkkkインスタンスを作成する必要があります。

ar & BOOST_SERIALIZATION_NVP(kkk); 

XMLアーカイブにシリアライズされますすべてがこのように構築されなければならないだけでなく、サブ要素。

関連する問題