假设以下代码:
// 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>
向量列表中?
任何例子都会有很大帮助。