Cereal / C ++ 11 - 如何指定反序列化的可选参数

时间:2018-05-16 12:38:58

标签: c++ serialization cereal

我已经上了一个用标准函数反序列化的类:

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_4parameter_5是可选的。

它们可能在输入JSON字符串中,也可能不在。

当我尝试将这些不完整的JSON反序列化而缺少一些参数时,我得到谷歌&#34;错误&#34; - 找不到那些缺失的参数。

有没有办法如何指定某些参数是可选的,如果它们不是JSON的一部分,将使用默认值?

1 个答案:

答案 0 :(得分:-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) );
}
...

或类似的东西..