如果我有一个模板类:
template<typename Layout> class LayoutHandler : Handler { };
并且我想将参数Layout公开给类的用户.
然后:
template<typename Layout> class LayoutHandler : Handler { public: typedef Layout Layout; // using the same name };
VS2012可以编译这段代码,并给出预期的结果. (我使用std :: is_same来检查它.)
在标准C 03或C 11中是否允许这样做?
解决方法
C 11中不允许.
typedef是一个声明. (见第7.1.3节)
模板参数不能在其范围内重新声明(包括嵌套作用域). (见第14.6.1.6节)