在自由函数中键入转换

时间:2013-11-29 08:49:06

标签: c++ jsoncpp

使用像jsoncpp这样的库来序列化我的C ++对象和数据(例如用Python绘制它们),我真的厌倦了代码中的所有循环,将std::vector< double >转换为{{1 }}秒。我最后一次又一次地重新输入相同的行。因此,我想让这更容易一些。

我有两个用例:将Json::Value类型(至少STLstd::vector)转换为std::map,并使用我自己的数据类型执行此操作

自有数据类型的解决方案:

  • 定义构造函数期望Json::Value,构造函数然后尝试用数据填充对象,或者如果传递的值不满足特定要求则抛出异常
  • const Json::Value&定义为我班级的成员函数。

这样,我应该能够写出这样的东西:

operator Json::Value()

但是如何使用MyObj o; Json::Value root; root["foo"] = o; MyObj reconstructed(root["foo"]); 类型执行此操作?编写显式函数,可能是模板,或者我应该像我自己的数据类型一样,除了我使用自由函数而不是成员函数?什么是最佳做法?

1 个答案:

答案 0 :(得分:1)

您可以使用for_each编写单个函数来执行此操作。

如果你想支持嵌套容器(向量中的向量等),那么你需要包装函数并递归调用函数,直到输入类型允许直接转换为Json :: Value。