次のコードを想定します。
// Base class
class Base {
public:
Base(int val) : hi(val) {
}
virtual void PublicMethod() { /* Do something */}
private:
int hi;
};
// Child class
class Child : public Base {
public:
Child(int val) : Base(val) {
}
void PublicMethod() { /* Do something */}
};
// Vector of pointers to prevent slicing
std::vector<std::shared_ptr<Base>> list;
(...) // Fill list with mixed data of class Base and Child
リストがオブジェクトでいっぱいになったら、データをファイルに保存したいと思います。このために、私は次のことを試しました:
std::ofstream os("data.txt", std::ios::out);
int size1 = list.size();
os.write((const char*)&size1, sizeof(int));
for (auto it = list.begin(); it < list.end(); ++it) {
os.write((const char*)(*it), size1 * sizeof(Base));
}
os.close();
ただし、これが正しいかどうかはわかりません。また、ファイルからのデータの読み取りも正しく機能していないようです。データを保存しているときにsizeof(Base)
、同じサイズではない可能性のある子オブジェクトに対しても機能しないのではないかと心配しています。
これが正しく機能したとしても、実際のデータをファイルに保存するより良い方法はありますか?また、ファイルからデータを簡単に読み取ってshared_ptr<Base>
ベクトル リストに保存するにはどうすればよいですか?
どの例も非常に役立ちます。