C++ 使用boost序列化从XML加载类

C++ 使用boost序列化从XML加载类,c++,boost,boost-serialization,C++,Boost,Boost Serialization,我试图从XML文件加载一个简单类,但出现以下错误: error: no match for 'operator>>' in 'xml >> boost::serialization::make_nvp(const char*, T&) [with T = Options](((Options&)(& o)))' 一定是我做错了什么蠢事,但我不知道是什么。有人有主意吗?这是我的密码: #include <fstream> #includ

我试图从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
}
#包括
#包括
#包括
#包括
#包括
类选项{
公众:
选项(){
SetInteger(“屏幕宽度”,1024);
SetInteger(“屏幕高度”,768);
}
void SetInteger(const std::string&name,int值){
整数u[name]=值;
}
私人:
映射整数;
好友类boost::serialization::access;
模板
无效序列化(存档和ar,常量未签名整数版本)
{
使用boost::serialization::make_nvp;
ar&make_nvp(“整数”,整数);
}
};
int main(){
选项o;
流ifs的std::of(“input.xml”);
boost::archive::xml\u-oarchivexml(ifs);
xml>>boost::serialization::make_nvp(“选项”,o);//错误
}

从您的代码和您正在编写的内容来看,您将尝试阅读。在这种情况下,您不应该使用流和xml文档,而应该使用ifstreamxml文档

#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); 
#包括
#包括
....
//阅读
std::ifstream ifs(“input.xml”);
boost::archive::xml\u iarchive xmlIn(ifs);
xmlIn>>boost::serialization::make_nvp(“选项”,o);
//写
std::ofs流(“output.xml”);
boost::archive::xml_-oarchivexmlout(ofs);
xmlOut