Как мне сериализовать Boost scoped_array, используя сериализацию Boost? - PullRequest
2 голосов
/ 26 июля 2011

Я пытаюсь сериализовать Boost scoped_array с использованием сериализации Boost, но компилятор (VS2008) выдает мне следующее сообщение об ошибке:

error C2039: 'serialize' : is not a member of 'boost::scoped_array<T>'

Как мне сериализовать scoped_array? Есть ли у меня библиотека Boost для этого?

Ответы [ 3 ]

1 голос
/ 07 августа 2011

Не угадай. scoped_ptr и scoped_array предназначены для отслеживания указателей в локальной области.

Шаблон scoped_ptr - это простое решение для простых нужд. Он предоставляет базовую возможность «приобретение ресурсов - инициализация», без семантики совместного владения или передачи собственности. И его имя, и применение семантики (поскольку она не копируется) сигнализируют о ее намерении сохранить право собственности только в рамках текущей области.

Похоже, что сериализация и последующее чтение контента противоречат намерениям класса.

0 голосов
/ 01 декабря 2011

Вот решение, которое я использовал (симметрично - работает для сохранения и загрузки):

void myClass::serialize(Archive & ar, const unsigned int file_version)
{
    ar & myScopedArraySIZE;

    // Only gets called during loading
    if (Archive::is_loading::value)
    {
        myScopedArray.reset(new ColourPtr[myScopedArraySIZE]);
    }

    for (uint i = 0; i < myScopedArraySize; i++)
    {
        ar & myScopedArray[i];
    }
}
0 голосов
/ 07 августа 2011

Сериализует сам массив, а не оболочку, управляющую памятью.

...