C++如何创建一个接受字符串并返回函数的映射

标签 c++ function map func

我想知道是否有一种方法可以使 map (在 C++ 中)返回一个函数。现在这是我的代码,它不起作用,我收到编译器错误。

#include <map>
#include <iostream>
#include <string>
using namespace std;

map<string, void()> commands;

void method()
{
    cout << "IT WORKED!";
}

void Program::Run()
{
    commands["a"]();
}

Program::Program()
{
    commands["a"] = method;
    Run();
}

任何一点建议都会很棒!提前谢谢你。

最佳答案

您不能在映射中存储函数——只能存储指向函数的指针。清理了一些其他次要细节后,您会得到如下内容:

#include <map>
#include <iostream>
#include <string>

std::map<std::string, void(*)()> commands;

void method() {
    std::cout << "IT WORKED!";
}

void Run() {
    commands["a"]();
}

int main(){ 
    commands["a"] = method;
    Run();
}

至少对于 g++ 4.7.1,这会打印 IT WORKED!,正如您显然想要/期望的那样。

关于C++如何创建一个接受字符串并返回函数的映射,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13022938/

相关文章:

c++ - 可以在 C++20 中的类定义之外默认比较运算符吗?

c# - 包含函数和可选参数的字典

map - 行主要订单索引

c++ - STL 容器的内存消耗

c++ - 指针作为映射 C++ STL 中的键

c++ - 在 C++ 中读取格式化数据的最简单/最清晰的方法

c++ - 自定义位数组 [] 和赋值运算符

c++ - 等效于 C++ iostream 的 StreamReader.ReadToEnd()

javascript - 为什么要调用这个函数呢?

c - 运行生成器字时发生段违规