Hi, this simple program will not compile. The only way to make it
work is to make a public default constructor. This defeats the purpose
of boost::serialization::access.
I tried to fix but I couldn't get
it to correctly call the access::construct();
Please help.
// g++ -o serialize_optional /tmp/serialize_optional.cpp -lboost_serialization
#include <fstream>
#include <iostream>
#include
#include
#include
#include
#include
#include
#include
#include
#include
class Foo {
public:
Foo(int k) : i(k) {}
friend std::ostream& operator<<(std::ostream& os, Foo const& foo) {
return os << "Foo { " << foo.i << " }";
}
private:
Foo() : i(-1) {};
friend class boost::serialization::access;
template<class Archive>
void serialize(Archive & ar, const unsigned int){
#define N(a) BOOST_SERIALIZATION_NVP(a)
ar & N(i);
#undef N
};
int i;
};
int main() {
using Data = boost::optional<Foo>;
std::cout << "Boost version: " << BOOST_VERSION << "\n";
{
auto f = Data(133);
std::ofstream os("test.xml");
boost::archive::xml_oarchive oa(os);
oa << boost::serialization::make_nvp("f", f);
}
{
Data g;
std::ifstream is("test.xml");
boost::archive::xml_iarchive ia(is);
ia >> boost::serialization::make_nvp("f", g);
std::cout << g.get() << "\n";
}
}
best regards
Janek Kozicki