自由函数中的类型转换

Type conversion in free functions

本文关键字:类型转换 函数 自由      更新时间:2023-10-16

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

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

针对自己的数据类型的解决方案:

  • 定义期望const Json::Value&的构造函数,然后构造函数尝试用数据填充对象,或者在传递的值不符合特定要求时抛出异常
  • operator Json::Value()定义为我的类的成员函数。

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

MyObj o;
Json::Value root;
root["foo"] = o;
MyObj reconstructed(root["foo"]);

但是我应该如何处理STL类型呢?编写显式函数,也许是模板,或者我应该像对自己的数据类型一样做同样的事情,除了我使用自由函数而不是成员函数?最佳实践是什么?

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

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