boost:: предупреждение сериализации неиспользуемая переменная file_version

Я использую библиотеку boost::serialization. При компиляции я получаю много длинных предупреждений, которые, кажется, связаны с тем, что не используется file_version в функции сериализации. (компилятор: г++)

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

пример кода (очень не самостоятельный, но должен быть достаточным, чтобы подчеркнуть):

template<class Archive>
void serialize(Archive &ar, const unsigned int file_version)
{
    ar & this->bias_;
    for(auto& layer : this->layers_)
        ar & layer; // old boost version doesn't do this for containers.
}

моя идея просто написать

template<class Archive>
void serialize(Archive &ar, const unsigned int file_version)
{
    file_version;
    ar & this->bias_;
    for(auto& layer : this->layers_)
        ar & layer;
}

по праву вызывает еще одно предупреждение.


person Gladaed    schedule 21.03.2018    source источник
comment
w.r.t. забавные комментарии boost.org/doc/libs /1_66_0/libs/сериализация/doc/   -  person sehe    schedule 21.03.2018
comment
@sehe, я не вижу там смешных комментариев. Можешь объяснить шутку? вы связали не тот раздел? я не понимаю, что вы говорите.   -  person Gladaed    schedule 21.03.2018
comment
// boost bug - can't handle non copy constructability – это не ошибка повышения, см. ссылку (также забавно объявление 2)   -  person sehe    schedule 21.03.2018
comment
@sehe комментарий есть, так как boost не позволял мне писать ar & this-›layers_ (если я правильно погуглил, исправлено в 1.6.1)   -  person Gladaed    schedule 21.03.2018
comment
1.6.1? Это не та версия, которую я помню. И, вероятно, он просто включает определенный заголовок, хотя, конечно, я не могу знать, что такое тип layers_ (inb4 hash_map ). Обратите внимание, что с циклом он будет работать только в том случае, если layers_ является контейнером фиксированного размера.   -  person sehe    schedule 21.03.2018
comment
станд::вектор. я думаю, что я имел в виду 1_61 также.   -  person Gladaed    schedule 21.03.2018
comment
Это всегда работало. (#include <boost/serialization/vector.hpp>). Журнал изменений не указывает на изменения с 1.58.0. Я предполагаю, что у вас действительно были проблемы с этим, просто знайте, что текущий код недействителен, если вектор не имеет фиксированного размера.   -  person sehe    schedule 21.03.2018
comment
@sehe спасибо, это было так. этот ручной способ работает, если я не меняю размер вектора, даже если я не исправил его вручную.   -  person Gladaed    schedule 21.03.2018
comment
Важно то, что размер (количество элементов) считается правильным для сериализованных данных при десериализации. На практике это означает, что размер необходимо зафиксировать.   -  person sehe    schedule 21.03.2018
comment
@sehe, кстати, могу ли я безопасно генерировать исключения при десериализации данных (например, если я сохранил старый размер и обнаружил несоответствие)   -  person Gladaed    schedule 21.03.2018
comment
Да, хотя вы, естественно, использовали бы параметр версии, чтобы обнаружить/обработать это! boost.org/doc/libs/1_66_0/libs/ сериализация/пример/   -  person sehe    schedule 21.03.2018


Ответы (1)


Вы можете просто объявить аргумент анонимно:

template<class Archive>
void serialize(Archive &ar, const unsigned int /*file_version*/)
{
    ar & this->bias_;
    for(auto& layer : this->layers_)
        ar & layer; // old boost version doesn't do this for containers.
}
person sehe    schedule 21.03.2018