【问题标题】:Cereal/C++ 11 - How to specify optional parameters for de-serializationCereal/C++ 11 - 如何指定反序列化的可选参数
【发布时间】:2018-05-16 12:38:57
【问题描述】:

我有一个用标准函数反序列化的类:

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 时,我得到 Cereal “错误” - 无法找到那些缺少的参数。

有什么方法可以指定某些参数是可选的,并且在它们不属于 JSON 默认值的情况下将被使用?

【问题讨论】:

    标签: c++ serialization cereal


    【解决方案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) );
    }
    ...
    

    或类似的东西..

    【讨论】:

    • “存在”是什么样的方法?我不确定我是否可以访问类似的东西....
    • exist() 对于验证可选参数是否存在的函数是伪函数。也许这个解决方案可能适合您的需要
    猜你喜欢
    • 2020-09-14
    • 2014-05-16
    • 1970-01-01
    • 2014-04-29
    • 2018-04-28
    • 1970-01-01
    • 1970-01-01
    • 2011-03-25
    相关资源
    最近更新 更多