2012-10-23 53 views
4

我想知道是否有一種方法可以使地圖(使用C++)返回一個func。這是我的代碼,它不工作,我得到一個編譯器錯誤。C++如何創建一個接受字符串並返回func的地圖

#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(); 
} 

建議的任何位將是真棒!先謝謝你。

+7

用C++ 11'的std ::地圖<的std :: string,性病::功能>' – chris

回答

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!,你顯然希望/預期。

+0

謝謝你,這個工作! – ixenocider

2

再次typedef是你的朋友。

typedef void (*func)(); 
map<string, func> commands; 
相關問題