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

How to create map<string, class::method> in c++

本文关键字:class method gt string 创建 map lt c++      更新时间:2023-10-16

我正在尝试使用回调在C++中创建字符串和方法的映射,这样我就可以在映射中搜索函数并调用它。问题是我有不同类型和参数的方法,我不知道如何定义回调和映射。该方法适用于int add(int,int)和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标准(几乎可以肯定),则可以从<functional>头使用std::function。由于这个现代C++功能在最近的MSOffice版本中被广泛使用(根据MSVC++开发人员博客),这应该会非常顺利。在GNU C++编译器中,它为每个调用添加两条CPU指令。