2013-03-28 28 views
0

一個非常簡單的問題,但我找不到答案。我想這樣做:mapde地圖的typedef別名

ClassA* a = MapOf_ptrMap[key1][key2]; with MapOf_ptrMap a map< string , (map < string, ClassA* >)* > object。

MapOf_ptrMap[key1]返回一個指向map<string, ClassA*>對象的指針(此時我想讓你知道我沒有設計這個,只需要應付它)。

我試過#define X[Key1][Key2] (*(X[Key1]))[Key2],但由於括號不能正常工作。我知道它適用於括號,但我寧願保留括號。還有什麼打擾我是define別名不考慮X的類型:我想用MapOf_ptrMap類型檢查輸入類型。

有什麼想法?

+0

我從來沒有見過'#define'指令與等號一起使用,就好像你在做任務一樣。這可能是一個問題嗎?不過,我可能只是不熟悉語法。 –

+1

@ acheong87你從來沒有見過它,因爲它不工作。該行的作用是將'X'定義爲文本擴展爲'[Key1] [Key2] =(*(X [Key1]))[Key2] – Angew

+0

oups,輸入錯誤 – lucasg

回答

3

若要生硬,define不是一種很好的「定義」類型的方法。

改爲使用typedef

而對於我們的理智,讓我們把它分解:

using namespace std; 
typedef map<string, ClassA *> map_value_t; 
typedef map<string, map_value_t *> map_t; 

std::合格類型(意大利麪條怪物希望的方式)版本:

typedef std::map<std::string, ClassA *> map_value_t; 
typedef std::map<std::string, map_value_t *> map_t; 

現在你應該可以申報對象類型爲map_t

現在的問題是,我們如何從這個可憐的結構中獲取東西?

map_t &blah; // comes from somewhere else. 

map_value_t *submap = blah[i]; 
ClassA *value = *submap[j]; 
+1

我把鼠標懸停在upvote上......你不是在認真地建議'使用namespace std;'來查看可能在頭文件中的代碼,對嗎? – Angew

+0

不,我不是:)這僅僅是爲了與他自己的例子更加兼容。 – Skurmedel

+0

哈哈,我試圖把std前綴放回去:在文件中至少有一千次調用std :: methodes。無論如何,我將結構更改爲Map of Map(這更容易一些處理)。 – lucasg