Json::Value 作为私人 class 成员

Json::Value as private class member

我正在使用 jsoncpp 库为 Reading/Writing 字符串 from/to 编写一个 json 文件的 C++ class。 我的问题是,是否可以为我的 class 创建一个 Json::Value 私有成员,并在每次需要 read/write 时使用它,而不是在每个函数中创建一个新的 Json::Value?

如果是这样,我如何在构造函数中初始化它并在每个函数中访问它?

您不需要对 Json::Value 进行任何特殊的初始化。您可以将其设为 private 成员变量并像使用任何其他成员变量一样使用它。

这是一个示例,其中我添加了对流 from/to istream/ostream 对象和一些成员函数的支持,以演示对特定字段的访问:

#include "json/json.h"

#include <fstream>
#include <iostream>

class YourClass {
public:
    // two public accessors:
    double getTemp() const { return json_value["Temp"].asDouble(); }
    void setTemp(double value) { json_value["Temp"] = value; }

private:
    Json::Value json_value;

    friend std::istream& operator>>(std::istream& is, YourClass& yc) {
        return is >> yc.json_value;
    }
    friend std::ostream& operator<<(std::ostream& os, const YourClass& yc) {
        return os << yc.json_value;
    }
};

int main() {
    YourClass yc;

    if(std::ifstream file("some_file.json"); file) {
        file >> yc;      // read file
        std::cout << yc; // print result to screen

        // use public member functions
        std::cout << yc.getTemp() << '\n';
        yc.setTemp(6.12);
        std::cout << yc.getTemp() << '\n';
    }
}

编辑:我被要求解释 if 语句,它的意思是 if( init-statement ; condition ) (在 C++17 中添加),它变得与此大致相同:

{ // scope of `file`
    std::ifstream file("some_file.json");

    if(file) { // test that `file` is in a good state
        // ... 
    }
} // end of scope of `file`