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

标签 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;
}

最佳答案

如果您的编译器支持 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/

相关文章:

c++ - 数组反向 - XOR 比使用临时对象切换慢

c++ - libc++ std::search_n 中的崩溃是一个错误吗?

ruby-on-rails - Ruby on Rails-关联在“before_destroy”之前被删除

objective-c - 如何在 SWIFT 中实现 Objective-C 回调处理程序?

c++ - 满足动态条件时退出递归函数

c++ - OSX 中的 Netbeans 和 Boost 库

c++排序不使用自定义函数

javascript - 清除 Javascript 中的 Var 或回调

javascript - 我知道回调函数是异步运行的,但是为什么呢?

node.js reqest.js/cheerio.js 返回空 json