Учтите это:
class Base {
protected:
unsigned int id_;
protected:
Base() {}
virtual ~Base(){}
};
class DerivedA : public Base {
public:
int someIntA_;
short someShortA_;
};
class DerivedB : public Base {
public:
int someIntB_;
double someDoubleB_;
};
void writeToFile( const std::string& filename, std::vector<Base*>& objs ) {
// first few elements in objs
objs[0] = DerivedA;
objs[1] = DerivedB;
objs[2] = DerivedB;
objs[3] = DerivedA;
// how to pack & extract data in binary?
}
Ваш вектор содержит указатели на Base
, которые в зависимости от системы и архитектуры будут определять sizeof()
тип указателя.Большинство систем имеют 4 байта для типа указателя, но это не гарантируется.Однако типы данных, на которые указывают эти указатели, имеют свои производные типы.В памяти sizeof(DerivedA)
будет отличаться от sizeof(DerivedB)
.Вы должны сообщить своему C++
Compiler
о том, как анализировать эти данные как при записи в файл, так и при чтении - извлечении из файла, и это не включает какие-либо методы сжатия, которые могут использоваться.
Теперь, как и для любых автоматически генерирующих библиотек, которые будут сериализировать ваши данные для вас;Я не знаком ни с чем из головы, но я видел, что другие дали вам несколько советов, которые, возможно, стоит рассмотреть, в противном случае вы сами пишете в файлы и из файлов в соответствии с вашими типами данных.и их структуры.