在C ++模板类中,我可以使用相同的名称键入模板参数吗?

时间:2013-05-17 16:22:00

标签: c++ templates typedef

如果我有模板类:

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中使用?

2 个答案:

答案 0 :(得分:4)

在C ++ 11中不允许这样做。

typedef是声明。 (见7.1.3节)

template参数无法在其范围内重新声明(包括嵌套范围)。 (见第14.6.1.6节)

C++11 draft standard n3242

答案 1 :(得分:1)

没有直到C + 11你不能使用它,它会给你一个错误。

'typedef Layout LayoutHandler :: Layout'的声明 错误:阴影模板parm'class Layout'