#include <string>
#include <iostream>
#include <boost/property_tree/ptree.hpp>
#include <boost/property_tree/xml_parser.hpp>
#include <cassert>
#include <fstream>
#include <iostream>
#include <string>
struct Person
{
std::string m_name;
int m_birth_year;
void Load(const std::string &filename)
{
boost::property_tree::ptree t;
boost::property_tree::xml_parser::read_xml(filename,t);
m_name = t.get<std::string>("Person.name");
m_birth_year = t.get<int>("Person.birth_year");
}
void Save(const std::string &filename) const
{
boost::property_tree::ptree t;
t.put("Person.name", m_name);
t.put("Person.birth_year", m_birth_year);
boost::property_tree::xml_parser::write_xml(filename,t);
}
};
std::ostream& operator<<(std::ostream& os,const Person& p)
{
os << p.m_name
<< ' ' //Add either a space, tab or newline
<< p.m_birth_year;
return os;
}
std::istream& operator>>(std::istream& is, Person& p)
{
is
>> p.m_name
>> p.m_birth_year;
return is;
}
int main()
{
//Create a Person and save it to file
{
Person p;
p.m_name = "Bilderbikkel";
p.m_birth_year = 1980;
std::ofstream f("tmp.txt");
f << p;
}
//Load a Person from file and check it is the same
{
std::ifstream f("tmp.txt");
Person p;
f >> p;
assert(p.m_name == "Bilderbikkel");
assert(p.m_birth_year == 1980);
}
//Display tmp.txt
{
std::cout << "Displaying tmp.txt:\n";
std::ifstream f("tmp.txt");
while(!f.eof())
{
std::string s;
std::getline(f,s);
std::cout << s << '\n';
}
}
//Create a Person and save it to XML file
{
Person p;
p.m_name = "Bilderbikkel";
p.m_birth_year = 1980;
p.Save("tmp.xml");
}
//Load a Person from XML file and check it is the same
{
Person p;
p.Load("tmp.xml");
assert(p.m_name == "Bilderbikkel");
assert(p.m_birth_year == 1980);
}
//Display tmp.xml
{
std::cout << "Displaying tmp.xml:\n";
std::ifstream f("tmp.xml");
while(!f.eof())
{
std::string s;
std::getline(f,s);
std::cout << s << '\n';
}
}
}
|