2016-07-02 7 views
0

Ich versuche zu lernen, wie boost :: serialization für die Aufnahme eines Objekts zu verwenden. Zum Beispiel verwende ich die folgenden Codes ein Objekt zu serialisiert:Wie spezifiziert man einen nvp-Wrapper für boost :: serialization?

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

Allerdings, wenn ich die Codes zu kompilieren, habe ich folgende Kompilierungsfehler:

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 

Die Fehlermeldung an die Quelle führt Boost-Code:

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

Irgendwelche Ideen? Vielen Dank.

Antwort

3

Sie benötigen kkk Instanz Abc in Ihrem Code am unteren Rand ein NVP auch machen:

ar & BOOST_SERIALIZATION_NVP(kkk); 

Alles, die in ein XML-Archiv serialisiert ist muss so konstruiert sein, nicht nur die Subelemente .