2012-10-23 3 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

,'표준 : :지도는 <표준은 : 문자열, 표준 : : 기능은 >' – 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(); 
} 

가 적어도 4.7.1 ++ g에, 이것은 당신이 분명히 원하는대로/예상 IT WORKED!을 인쇄 : 몇 가지 다른 사소한 세부 사항 정리, 당신은 이런 식으로 뭔가를 얻을.

+0

감사합니다,이 일! – ixenocider

2

다시 typedef은 (는) 친구입니다. C++ 11

typedef void (*func)(); 
map<string, func> commands; 
관련 문제