Я копирую некоторые объекты в файл, и все они получены из одного класса.но я хочу иметь возможность вызывать их функции после загрузки, чтобы делать то, что должен делать этот класс, вот что я делал до сих пор:
#include <iostream>
#include <fstream>
using namespace std;
struct a
{
virtual void print()
{
cout << "this is a.\n";
};
};
struct b : public a
{
virtual void print()
{
cout << "this is b.\n";
}
};
int main()
{
ofstream testofile("test.bin",ios::binary);
a* tempa = new a;
a* tempb = new b;
testofile.write((char*)tempa,sizeof(a));
testofile.write((char*)tempb,sizeof(b));
testofile.flush();
testofile.close();
ifstream testifile("test.bin",ios::binary);
a* x = (a*)new char[max(sizeof(a),sizeof(b))];
testifile.read((char*)x,sizeof(a));
x->print();
testifile.read((char*)x,sizeof(b));
x->print();
}
мой пример работает нормально, но если я комментирую сохранить часть, а затем выполнитьпрограмма, кажется, vtable является недопустимым для нового запущенного приложения (хотя в моем коде ничего не изменилось).проблема в том, что мой класс файлового менеджера не знает обо всех возможных объектах, которые могут извлекаться из моего базового объекта, и я хочу перестроить всю структуру моего приложения, используя только один вызов файлового менеджера для его загрузки.конечно, каждый из моих объектов имеет свои собственные функции сохранения / загрузки, но как файловому менеджеру угадать, где функция загрузки подходит для текущего блока данных?