在c++模板类中,可以使用相同的名称定义模板参数吗?

In a C++ template class, can I typedef the template parameter using the same name?

本文关键字:定义 参数 c++ 可以使      更新时间:2023-10-16

如果我有一个模板类:

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节)

不能在其作用域中(包括嵌套作用域)重新声明template参数。(见14.6.1.6节)

c++ 11标准草案n3242

不,直到C+11你才可以使用它,它会给你一个错误。

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