2013-05-22 2 views
0

이 유형의 맵을 채우는 방법과 주로 함수 포인터에 액세스하는 방법을 알고 싶습니다.std :: map <std :: pair <enum1, enum2>, funcPtr>을 채우고 액세스하는 방법?

지도 :이처럼 그것을 채울

enum enum1 
{ 
    val11, 
    val12, 
    val13 
}; 

enum enum2 
{ 
    val21, 
    val22, 
    val23 
}; 

typedef void(MyClass::*funcPtr)(); 

std::map<std::pair<enum1, enum2>, funcPtr> map; 

, 작동하는 것 같다 :

map.insert(std::make_pair(std::make_pair(val11, val21), &MyClass::init)); 

을하지만이 같은 기능에 액세스 할 수 없습니다

map[std::make_pair<val11, val21>](); 

내가 뭘 잘못하고 있니?

답변

2

당신은 make_pair와 잘못된 괄호를 사용하고 MyClass의 몇 가지 예를합니다 (.* 또는 ->* 연산자를 사용하여)의 멤버 함수를 호출 할 필요가 있습니다 :

MyClass obj; 
(obj.*map[std::make_pair(val11, val21)])(); 
+0

내가 노력하고있어'이 -> * (map [std :: make_pair (val11, val21)])();'오류가 발생했습니다 : '오류 :'. * '또는'-> * '를 사용하여 [.. .] ' – Elfayer

+0

우선 순위 문제입니다. 시도해 보라.'(this -> * map [std :: make_pair (val11, val21)])();' –

+0

네, 저의 실수는 첫 번째 괄호를 잊어 버렸습니다. ^^ – Elfayer

관련 문제