使用 boost 序列化从 XML 加载类
Posted
技术标签:
【中文标题】使用 boost 序列化从 XML 加载类【英文标题】:Loading a class from XML with boost serialization 【发布时间】: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
【问题讨论】:
【参考方案1】:从您的代码和您正在编写的内容来看,您正在尝试阅读。在这种情况下,您不应使用 ofstream 和 xml_oarchive,而应使用 ifstream 和 xml_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);
【讨论】:
以上是关于使用 boost 序列化从 XML 加载类的主要内容,如果未能解决你的问题,请参考以下文章
boost::archive::xml_oarchive 中的 class_id