模板参数隐藏

发布于 2024-11-06 23:27:46 字数 513 浏览 0 评论 0原文

ISO 草案 n3290 第 3.3.9 节第 4 段中的一点:

模板参数名称的声明区域嵌套在 立即封闭声明式 区域。[注:结果, 模板参数隐藏任何实体 在附件中具有相同的名称 范围(3.3.10)。

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

任何人都可以....告诉一些除此之外的其他例子..where &出现这种情况的地方

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

A point from ISO draft n3290 section 3.3.9 paragraph 4:

The declarative region of the name of a template parameter is nested within the
immediately-enclosing declarative
region.[Note: As a result, a
template-parameter hides any entity
with the same name in an enclosing
scope (3.3.10).

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

Can any one please ....tell some other example other than this ..where & where this situation erises

draft link n3290: http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2011/n3290.pdf

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

你与清晨阳光 2024-11-13 23:27:46

我认为这是非常明显的:只要模板声明范围内的实体与模板参数之一具有相同的名称,该名称就会隐藏在模板中。如果您在举出例子时遇到问题,很可能您不理解引文的含义。你明白了什么?您难以理解的是什么?

对于那些不想了解该标准的人来说,完成原始引用也很重要:

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

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

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

I think it is quite obvious: any time that an entity in the scope of the template declaration has the same name as one of the template parameters, the name will be hidden within the template. If you are having problems coming up with examples chances are that you did not understand the meaning of the quote. What is it that you understood? What is it that you have troubles understanding?

Also for those that don't want to go into the standard, it is important to complete the original quote:

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

Here, X is a non-type template parameter of type int and Y is a non-type template parameter of the same type as the second template parameter of A. -- end example ] -- end note ]

Which helps understanding the example. Note what the quote means: the first N refers to the typedef at the namespace scope, then a template argument N is introduced. From there on, the template argument hides the outer N, and the next appearance of N refers to the template argument and not to the outer N (only within the declarative scope of the template)

千寻… 2024-11-13 23:27:46

当然:

int n = 0;

void f() {
   int n = 42;
}

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

Sure:

int n = 0;

void f() {
   int n = 42;
}

The n in the function hides the one declared at global scope.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文