У меня есть программная среда, скомпилированная и успешно работающая как на Mac, так и на Linux. Я сейчас пытаюсь перенести его на Windows (используя Mingw). Пока что у меня есть программное обеспечение, которое компилируется и работает под Windows, но оно неизбежно глючит. В частности, у меня проблема с чтением данных, которые были сериализованы в macos (или linux) в версию программы для Windows (segfaults).
Процесс сериализации сериализует значения простых переменных (long, ints, doubles и т. Д.) На диск.
Это код, который я использую:
#include <iostream>
#include <fstream>
template <class T>
void serializeVariable(T var, std::ofstream &outFile)
{
outFile.write (reinterpret_cast < char *>(&var),sizeof (var));
}
template <class T>
void readSerializedVariable(T &var, std::ifstream &inFile)
{
inFile.read (reinterpret_cast < char *>(&var),sizeof (var));
}
Таким образом, чтобы сохранить состояние группы переменных, я вызываю serializeVariable для каждой переменной по очереди. Затем, чтобы прочитать данные обратно, вызываются readSerializedVariable в том же порядке, в котором они были сохранены. Например, чтобы сохранить:
::serializeVariable<float>(spreadx,outFile);
::serializeVariable<int>(objectDensity,outFile);
::serializeVariable<int>(popSize,outFile);
И читать:
::readSerializedVariable<float>(spreadx,inFile);
::readSerializedVariable<int>(objectDensity,inFile);
::readSerializedVariable<int>(popSize,inFile);
Но в Windows это чтение сериализованных данных не выполняется. Я предполагаю, что Windows сериализует данные немного по-другому. Интересно, есть ли способ, которым я мог бы изменить вышеуказанный код, чтобы данные, сохраненные на любой платформе, можно было читать на любой другой платформе ... какие-нибудь идеи?
Приветствия
Бен.