如果我有模板类:
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中使用?
答案 0 :(得分:4)
在C ++ 11中不允许这样做。
typedef
是声明。 (见7.1.3节)
template
参数无法在其范围内重新声明(包括嵌套范围)。 (见第14.6.1.6节)
答案 1 :(得分:1)
没有直到C + 11你不能使用它,它会给你一个错误。
'typedef Layout LayoutHandler :: Layout'的声明 错误:阴影模板parm'class Layout'