Можно ли считать сериализованные данные MFC в типы данных с более высокой точностью?
Я работаю с устаревшим кодом в VS2010 и переместил многие структуры данных с использования short и float на использование int и double, соответственно, для исправления многих предупреждений компилятора.
Однако, похоже, что это сломало сериализацию mfc (CArchive), так как я больше не могу читать старые сериализованные данные. Я пробовал приводить и использовать временные переменные, но результаты не внушают оптимизма. Некоторые переменные читаются правильно, другие выглядят как переполненные значения, поэтому я действительно ищу способ убедиться, что оператор ">>" читает только короткие или плавающие числа.
Конечно, один из вариантов - вернуться к старой структуре, но, если возможно, я бы хотел придерживаться "более современных" типов данных и исправить процедуру чтения сериализованных данных. Возможно ли это, и если да, то как это можно сделать?
1 ответ
Попробуйте использовать схему версий:
IMPLEMENT_SERIAL(CMyObject, CObject, VERSIONABLE_SCHEMA| new_version_schema)
void CMyObject::Serialize(CArchive& ar)
{
if (ar.IsLoading())
{
int nVersion = ar.GetObjectSchema();
switch(nVersion)
{
case old_version_schema:
// read old types short and float convert them to int and double
break;
case new_version_schema:
// read new types int and double
break;
default:
// report unknown version of
// this object
break;
}
}
else
{
// new save with int and double
}