【问题标题】:Loading a class from XML with boost serialization使用 boost 序列化从 XML 加载类
【发布时间】:2011-04-20 10:48:38
【问题描述】:

我正在尝试从 XML 文件加载一个简单的类,但收到以下错误:

error: no match for 'operator>>' in 'xml >> boost::serialization::make_nvp(const
char*, T&) [with T = Options](((Options&)(& o)))'

我做错了一定是愚蠢的,但我不知道是什么。有人有想法吗?这是我的代码:

#include <fstream>
#include <boost/serialization/string.hpp>
#include <boost/serialization/map.hpp>
#include <boost/archive/xml_oarchive.hpp>
#include <boost/serialization/nvp.hpp>

class Options {
public:
    Options() {
        SetInteger("screenWidth", 1024);
        SetInteger("screenHeight", 768);
    }
    void SetInteger(const std::string& name, int value) {
        integers_[name] = value;
    }
private:
    std::map<std::string, int> integers_;

    friend class boost::serialization::access;
    template<class archive>
    void serialize(archive& ar, const unsigned int version)
    {
        using boost::serialization::make_nvp;
        ar & make_nvp("integers", integers_);
    }
};

int main() {
    Options o;
    std::ofstream ifs("input.xml");
    boost::archive::xml_oarchive xml(ifs);
    xml >> boost::serialization::make_nvp("options", o); // error
}

【问题讨论】:

    标签: c++ boost boost-serialization


    【解决方案1】:

    从您的代码和您正在编写的内容来看,您正在尝试阅读。在这种情况下,您不应使用 ofstream 和 xml_oarchive,而应使用 ifstreamxml_iarchive

    #include <boost/archive/xml_iarchive.hpp>
    #include <boost/archive/xml_oarchive.hpp>
    
    ....
    
    //for read
    std::ifstream ifs("input.xml");
    boost::archive::xml_iarchive xmlIn(ifs);
    xmlIn >> boost::serialization::make_nvp("options", o); 
    
    //for write
    std::ofstream ofs("output.xml");
    boost::archive::xml_oarchive xmlOut(ofs);
    xmlOut << boost::serialization::make_nvp("options", o); 
    

    【讨论】:

      猜你喜欢
      • 2015-09-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-01-15
      • 1970-01-01
      • 2016-01-26
      • 1970-01-01
      • 2013-04-14
      相关资源
      最近更新 更多