статические члены и ускорение сериализации - PullRequest
7 голосов
/ 20 марта 2009

Я использую Boost.Serialization для архивирования содержимого класса. Одной из переменных-членов является статический std :: vector.

Архивирование и восстановление идут хорошо, но я надеялся, что библиотека сохранит статические элементы только один раз, и, судя по размеру файла, статические члены полностью сохраняются для каждого архивированного экземпляра.

Это довольно легко обойти, используя set / getter для статического вектора и сериализовав статический вектор вне класса один раз.

Но я бы предпочел отдельный класс. Существует ли простой и понятный способ архивирования статического содержимого класса только один раз?

Ответы [ 2 ]

2 голосов
/ 20 марта 2009

Сериализует статический вектор перед сериализацией всех экземпляров класса.

Если вы сериализуете вектор следующим образом:

template<class Archive>
void serialize(Archive & ar, const unsigned int version)
{
    ar & this->someVar;
    ar & this->AnotherVar;
    ar & staticVector;  
}

Тогда, конечно, статический вектор сериализуется с каждым экземпляром.

Если вам понадобятся какие-либо дополнительные разъяснения, опубликуйте, пожалуйста, вашу функцию serialize и функцию, которая ее вызывает.

1 голос
/ 20 марта 2009

У меня очень ограниченный опыт работы с Boost.Serialization, поэтому, пожалуйста, примите во внимание следующее:

IIRC, лечение, которое вы хотите для своего статического члена, это то, что делается с указателями. Так что, возможно, сериализация указателя на статический член будет работать.

Самокритика: хотя я не уверен, как это можно применить при десериализации.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...