自由函数中的类型转换 使用像 JSONCPP < /C>等系列来序列化C++对象和数据(例如用Python来绘制它们),我真的厌倦了我的代码中所有的循环来转换 STD::vector s到 JSON::值< /C>最后我一次又一次地重复输入相同的行。因此,我想让这更容易一点

自由函数中的类型转换 使用像 JSONCPP < /C>等系列来序列化C++对象和数据(例如用Python来绘制它们),我真的厌倦了我的代码中所有的循环来转换 STD::vector s到 JSON::值< /C>最后我一次又一次地重复输入相同的行。因此,我想让这更容易一点,c++,jsoncpp,C++,Jsoncpp,我有两个用例:将STL类型(至少std::vector,std::map)从和转换为Json::Value,并使用我自己的数据类型执行此操作 针对自己的数据类型的解决方案: 定义构造函数期望const Json::Value&,然后构造函数尝试用数据填充对象,如果传递的值不满足特定要求,则抛出异常 将操作符Json::Value()定义为我的类的成员函数 这样,我就可以写这样的东西: MyObj o; Json::Value root; root["foo"] = o; MyObj reco

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

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

  • 定义构造函数期望
    const Json::Value&
    ,然后构造函数尝试用数据填充对象,如果传递的值不满足特定要求,则抛出异常
  • 操作符Json::Value()
    定义为我的类的成员函数
这样,我就可以写这样的东西:

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

但是我应该如何处理
STL
类型呢?写显式函数,可能是模板,或者我应该对我自己的数据类型做同样的操作,只是我使用自由函数而不是成员函数?最佳做法是什么?

您可以使用编写一个函数来实现这一点


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

很抱歉造成混淆,我编辑了我的问题:重复同一段代码会让我感到厌倦,所以对我来说,隐式转换是可取的。我知道如何在小代码中将向量转换为Json::Value,但不知道将适当的代码放在哪里。呃。。。只需将其放在函数中,并将其放在包含Jsoncpp的实用程序文件中。如果我有依赖于库的实用程序文件,我通常会调用文件对:nameofLib_util.h/cpp或nameofLibutil.h/cpp。我的问题是:函数是显式的,比如“vec_to_json”,还是隐式的,比如上面的
操作符
示例。。。与其说是“我根本不知道这是如何工作的”,不如说是“最佳实践”。除非您想自己更改类,否则您不能向Json::Value添加显式转换运算符。这是涵盖的。在您的例子中,只需添加一个返回Json::Value对象的新函数即可。谢谢,SO post正是我缺少的链接。