Jsoncpp 函数的元组

Tuple of Jsoncpp functions

我目前正在处理一些配置文件,我想将选项与配置函数进行映射。到目前为止,我有这个工作代码:

std::unordered_map<std::string, void (Model::*)(int)> m_configMap = 
{
{ "threshold", &Model::setThreshold }
};

现在,您可能会很清楚地注意到,如果输入参数不同,这种方法将不起作用,所以我想像这样添加一个解析器(使用 Jsoncpp 库):

std::unordered_map<stsd::string, std::tuple<void(Model::*)(std::any), std::any(Json::Value*)()>> m_configMap = 
{
{ "threshold", {&Model::setThreshold, &Json::Value::asInt}}
};

现在,这不起作用,因为它在大括号初始化列表中给我一个错误,说它无法转换类型。我不太明白,所以我尝试了一个更小的例子:

std::tuple<void(Model::*)(int), Json::Int (Json::Value::*)(void)> foo =
{&Model::setThreshold, &Json::Value::asInt };

这也不起作用。但是,如果我更改字符串的 Json 部分,它将起作用。

我不确定这有什么问题,我想知道是否有人看到了我遗漏的东西。

非常感谢您

看来您不是在引用 Model 的实例,或者 Model 的成员函数不是静态的。我不知道 JSON 部分,但这应该可以帮助您入门。如果您有任何问题,请告诉我。

#include <iostream>
#include <functional>
#include <string_view>
#include <unordered_map>

struct Model
{
public:
    void setTreshold(int value)
    {
        std::cout << "treshold set to " << value << "\n";
    }

};


int main()
{
    Model model;

    // I prefer using string_view over string for const char* parameters
    // I also prefer using std::function over function pointers
    std::unordered_map<std::string_view, std::function<void(int)>> m_configMap
    {{
        // the function should refer to an instance of Model, so  use a lambda 
        // not a direct function pointer
        {"threshold", [&](int value) { model.setTreshold(value); } }
    }};

    auto fn = m_configMap["threshold"];
    fn(42);

    return 0;
}