模板参数隐藏

时间:2011-05-13 07:25:37

标签: c++ templates c++11

ISO草案n3290第3.3.9节第4段:

  

模板参数名称的声明性区域嵌套在   立即封闭声明   区域。[注:结果,a   template-parameter隐藏任何实体   在封闭中使用相同的名称   范围(3.3.10)。

Example:
typedef int N;
template<N X, typename N, template<N Y> class T> struct A;

任何人都可以......告诉除此之外的其他一些例子..其中&amp;这种情况发生的地方

草稿链接n3290:http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2011/n3290.pdf

2 个答案:

答案 0 :(得分:3)

我认为很明显:只要模板声明范围内的实体与其中一个模板参数同名,名称就会隐藏在模板中。如果您在提出示例时遇到问题,则可能是因为您不理解引用的含义。你理解的是什么?什么是你有理解的麻烦?

对于那些不想进入标准的人,重要的是要完成原始报价:

   typedef int N;
   template<N X, typename N, template<N Y> class T> struct A;
  

这里,X是int类型的非类型模板参数,Y是与A的第二个模板参数相同类型的非类型模板参数。 - 结束示例] - 结束注释]

这有助于理解这个例子。请注意引用的含义:第一个N引用命名空间范围内的typedef,然后引入模板参数N。从那时起,模板参数隐藏外部NN的下一次出现是指模板参数,而不是外部N(仅在模板的声明范围内)

答案 1 :(得分:3)

不确定

int n = 0;

void f() {
   int n = 42;
}

函数中的n隐藏了在全局范围内声明的那个。