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;
}
我目前正在处理一些配置文件,我想将选项与配置函数进行映射。到目前为止,我有这个工作代码:
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;
}