如何在c ++中创建map <string,class :: method =“”>

时间:2015-12-17 12:24:26

标签: c++ callback

我正在尝试使用回调在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;
}

1 个答案:

答案 0 :(得分:0)

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