Cereal/C++ 11 - Как указать необязательные параметры для десериализации

У меня есть класс, который десериализован стандартной функцией:

template<class Archive> // public serialization (normal)
void serialize(Archive & ar)
{
  ar(
    cereal::make_nvp("parameter_1", parameter_1), 
    cereal::make_nvp("parameter_2", parameter_2), 

    cereal::make_nvp("parameter_3", parameter_3), 

    cereal::make_nvp("parameter_4", parameter_4), 

    cereal::make_nvp("parameter_5", parameter_5) ); 
}

Но в моем случае parameter_4 и parameter_5 необязательны.

Они могут быть или не быть во входной строке JSON.

Когда я пытаюсь десериализовать такой неполный JSON с отсутствующими некоторыми параметрами, я получаю «ошибку» Cereal - не могу найти эти отсутствующие параметры.

Есть ли способ указать, что некоторые параметры являются необязательными и в случае, если они не являются частью значений по умолчанию JSON, будут использоваться?


person StefanB    schedule 16.05.2018    source источник


Ответы (1)


как насчет:

..
if (exist(parameter_4, parameter_5) {
  ar(
     cereal::make_nvp("parameter_1", parameter_1), 
     cereal::make_nvp("parameter_2", parameter_2), 
     cereal::make_nvp("parameter_3", parameter_3), 
     cereal::make_nvp("parameter_4", parameter_4), 
     cereal::make_nvp("parameter_5", parameter_5) ); 
}
else {
  ar(
     cereal::make_nvp("parameter_1", parameter_1), 
     cereal::make_nvp("parameter_2", parameter_2), 
     cereal::make_nvp("parameter_3", parameter_3) );
}
...

или что-то похожее..

person Gal Keren    schedule 16.05.2018
comment
Какой метод существует? Я не уверен, что у меня есть доступ к чему-то подобному.... - person StefanB; 16.05.2018
comment
exists() псевдо для функции, которая проверяет, существуют ли необязательные параметры или нет. возможно, это решение может удовлетворить ваши потребности - person Gal Keren; 16.05.2018