4

我想知道是否有一种方法可以使地图(在 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();
}

任何一点建议都会很棒!先感谢您。

4

2 回答 2

4

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

#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!,正如您显然想要/期望的那样。

于 2012-10-23T03:07:56.447 回答
2

typedef是你的朋友。

typedef void (*func)();
map<string, func> commands;
于 2012-10-23T03:10:31.473 回答