2016-07-02 5 views
0

나는 개체를 기록하는 데 boost :: serialization을 사용하는 방법을 배우려고합니다. 예를 들어, 내가 객체 직렬화하기 위해 다음과 같은 코드를 사용하고 있습니다 :boost :: serialization을위한 nvp 래퍼를 지정하는 방법은 무엇입니까?

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 

오류 메시지가 소스 리드 : 그러나

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(); 

을 내가 코드를 컴파일 할 때, 나는 다음과 같은 컴파일 오류가 부스트 코드 :

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 아카이브 일련의이 방법을 구축해야뿐만 아니라 하위 요소를 .