typedef地图的别名

时间:2013-03-28 15:13:02

标签: c++ map alias

一个非常简单的问题,但我找不到答案。我想这样做:

ClassA* a = MapOf_ptrMap[key1][key2];,MapOf_ptrMap为map< string , ( map < string, ClassA* >)* >对象。

MapOf_ptrMap[key1]返回指向map<string, ClassA*>对象的指针(此时我想让你知道我没有设计这个,只需要处理它)。

我已经尝试了#define X[Key1][Key2] (*(X[Key1]))[Key2]但由于方括号而无效。我知道它适用于括号,但我宁愿保留括号。另外令我困扰的是define别名不考虑X的类型:我想检查输入类型为MapOf_ptrMap类型。

有什么想法吗?

1 个答案:

答案 0 :(得分:3)

说实话,define不是“定义”类型的好方法。

改为使用typedef

为了我们的理智,让我们分解它:

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

具有std::限定类型的版本(Spaghetti Monster的预期方式):

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];