我正在尝试使用回调在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;
}
答案 0 :(得分:0)
如果您的编译器支持C ++ 11标准(几乎可以肯定),您可以使用std::function
标头中的<functional>
。由于这个现代C ++特性在最近的MS Office版本中广泛使用(根据MSVC ++ Dev博客),这应该非常顺利。在GNU C ++编译器中,它为每次调用添加了两条CPU指令。