Я хотел бы сохранить объекты из родительского класса в текстовом файле, а затем иметь возможность загружать объекты. Проблема в том, что все объекты являются указателями, поэтому могут быть сохранены только адреса объектов, но не сами объекты. Код ниже компилируется, но я не уверен, что означает информация в файле .txt.
#include <iostream>
#include <fstream>
#include <boost/archive/text_oarchive.hpp>
#include <boost/archive/text_iarchive.hpp>
#include <sstream>
class Gear {
public:
template<typename Archive>
void serialize(Archive& ar, unsigned int version) { ar & v; }
void setV (const double& _v) { v = _v; }
double getV () { return v; }
void status () { std::cout << "v = " << v << std::endl; }
private:
double v;
};
class Car {
public:
template<typename Archive>
void serialize(Archive& ar, unsigned int version) {
ar & hp;
ar & x;
}
void setHP (const int& _hp) { hp = _hp; }
void setGear (Gear* _Gear) { x = _Gear; }
void status () { std::cout << "hp = " << hp << " Gear with v = " << x->getV() << std::endl; }
private:
int hp;
Gear *x;
};
int main() {
// Define new Gear:
Gear* g = new Gear();
g->setV(2.5);
g->status();
// Expectation is Car sets up the Gear.
Car c;
c.setHP(80);
c.setGear(g);
c.status();
std::ofstream outputStream;
outputStream.open("Car.txt");
boost::archive::text_oarchive outputArchive(outputStream);
outputArchive << c;
outputStream.close();
Car b;
std::ifstream inputStream;
inputStream.open("Car.txt", std::ifstream::in);
boost::archive::text_iarchive inputArchive(inputStream);
inputArchive >> b;
b.status();
inputStream.close();
return 0;
}
И в файле я получаю:
22 serialization::archive 10 0 0 80 1 1 0
0 2.5
Что все это значит? 2.5 имеет смысл, но другие я не уверен.
Я также использовал sstream вместо io / fstream (замените код из std :: ofstream outputStream; на inputStream.close (); с этим кодом ниже):
std::stringstream ss;
boost::archive::text_oarchive oa{ss};
oa << c;
Car b;
boost::archive::text_iarchive ia{ss};
ia >> b;
b.status();
С этим кодом Я получаю (после запуска ./a.out с помощью команды g ++ -std = c ++ 11 boost_serial. cpp -lboost_serialization):
v = 2.5
hp = 80 Gear with v = 2.5
hp = 80 Gear with v = 2.5