13

如果我有一个模板类:

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 中是否允许?

4

2 回答 2

6

在 C++11 中是不允许的。

Atypedef是一个声明。(见第 7.1.3 节)

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

C++11 草案标准 n3242

于 2014-08-07T10:51:58.550 回答
1

在 C+11 之前你不能使用它,它会给你一个错误。

'typedef Layout LayoutHandler::Layout' 错误声明:shadows template parm 'class Layout'</p>

于 2013-05-17T16:33:00.307 回答