在下面的代码片断:指依赖类型名
#include <map>
template<class T>
struct Base {
typedef T U;
};
template<class T>
struct Derived: public Base<std::map<int,std::map<int,T>>> {
typedef typename Base<std::map<int,std::map<int,T>>>::U U; // ugly!
void F(U u) {};
};
int main(){}
标记行是难看,并且还包含重复的信息(如果基类参数的变化的类型,这条线也必须被改变)。但是有必要重复这样的声明,否则代码不会编译。另外,我想避免做一个全局typedef声明...
有没有解决方案来引用在模板相关的基类中定义的类型?
问题是,这样看来,人们可以随意选择C的值,而在我的情况下,如果用户更改C,代码可能会以一些不可预见的方式破坏。 C是一个实现细节。 –
@EmanuelePaolini也许'typedef std :: map> Map;'在声明'struct Derived'之前,然后简单地'Base
@ W.F。这将是一个全局的typedef,其实现细节也是我想避免的。 –