我正在尝试使用回调在 C++ 中创建字符串和方法的映射,这样我就可以在映射中搜索函数并调用它。我是通过以下方式做到的。问题是我有不同类型和参数的方法,我不知道如何定义回调和映射。该方法适用于 int add(int, int) 和 int subtract(int, int),但如何为方法字符串 helloworld() 定义回调? 谁能帮我?谢谢!
typedef int(*Callback)(int, int); //for add and subtract
QMap<QString, Callback> functionTable;
main{
registerCallback("add", add);
registerCallback("subtract", subtract);
int result = 0;
if (functionTable.contains(add))
{
Callback callback = functionTable[add];
result = callback(1, 2);
return QString::number(result) ;
}
else
{
return "methodNotFound";
}
}
int add(int a, int b)
{
return a + b;
}
int subtract(int a, int b)
{
return a - b;
}
String helloWorld()
{
return "hello world";
}
void registerCallback(QString methodname, Callback callback)
{
functionTable[methodname] = callback;
}
最佳答案
如果您的编译器支持 C++11 标准(几乎肯定支持),您可以使用 std::function
来自 <functional>
header 。由于这个现代 C++ 功能在最新的 MS Office 版本中被广泛使用(根据 MSVC++ Dev 博客),这应该工作得非常顺利。在 GNU C++ 编译器中,它为每个调用添加了两条 CPU 指令。
关于c++ - 如何在 C++ 中创建 map<string, class::method>,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34334518/