2013-04-26 59 views
0

假設我使用boost將序列化爲XML存檔。該地圖類型爲std :: map < long,CMyObject>。我意識到我需要使用這種類型:std :: map < std :: string,CMyObject>。在這種情況下,我將如何去處理向後兼容?下面是我的連載方法看起來像現在:C++ boost序列化 - 如何替換存檔中的字段類型

template<class Archive> 
    void serialize(Archive & ar, const unsigned int file_version) 
    { 
     ar & BOOST_SERIALIZATION_NVP(m_MyMap); 
    } 
    void serialize (std::ostream &out) const 
    { 
     boost::archive::xml_oarchive oa (out); 
     oa << boost::serialization::make_nvp ("MyArchive.xml", *this); 
    } 
    void serialize (std::istream &in) 
    { 
     boost::archive::xml_iarchive ia (in); 
     ia >> boost::serialization::make_nvp ("MyArchive.xml", *this); 
    } 

m_MyMap目前的類型的std ::地圖<長,CMyObject>但需要改變爲std ::地圖<的std :: string,CMyObject>。什麼是最簡單的方法來處理這個問題?

回答

1

好, split serialize into save/loadbump the version, 和

template<class Archive> 
void load (Archive & ar, unsigned version) { 
    if (version < 1) { 
    std::map<long, CMyObject> tmp; ar & tmp; 
    for (auto& en: tmp) m_MyMap[std::to_string(en.first)] = en.second; 
    } else ar & m_MyMap; 
} 
相關問題