从类内部获取模板[重复]

Posted

技术标签:

【中文标题】从类内部获取模板[重复]【英文标题】:Get template from inside class [duplicate] 【发布时间】:2014-06-14 03:31:45 【问题描述】:

考虑以下代码:

template <template <int> class T>
struct B 
;

template <int N>
struct A 
    B<A> b;
;

这不会编译,因为B&lt;A&gt; b 中的A 指的是类A&lt;N&gt;,而不是模板。如何从A&lt;N&gt; 的正文中获取模板A

【问题讨论】:

+1 @T.C.正是,谢谢!如果您发帖,我可以接受您的评论作为答案。 @par 这是一个clang bug,你的代码是有效的。 【参考方案1】:

我认为绕过这个问题的最简单方法是:

template <int N>
struct A 
    B<::A> b;
;

虽然这实际上是一个非常有趣的问题,因为看起来B&lt;A&gt; 应该可以工作。来自 N3936 的 §14.6.1 [temp.local]/p1:

与普通(非模板)类一样,类模板有一个 注入类名(第 9 条)。注入的类名可以用作 模板名称类型名称。当它与一个 template-argument-list,作为模板的 template-argument 模板参数,或作为最终标识符 elaborated-type-specifier 的友元类模板声明,它 指类模板本身。否则等价于 template-name 后跟类的 template-parameters .

中包含的模板

所以看起来B&lt;A&gt; 应该等同于B&lt;::A&gt;。 GCC 4.8 accepts OP 中的代码,虽然 Clang 3.4 doesn't。

【讨论】:

啊。我正在使用 Clang。

以上是关于从类内部获取模板[重复]的主要内容,如果未能解决你的问题,请参考以下文章

如何从类中获取 id [重复]

从类搜索中获取参数[重复]

C# + Unity - 从类列表中的变量中获取最小值[重复]

Java - 从类中调用私有数组列表[重复]

在 SpringBoot 中调用类内部的端点 [重复]

C ++模板内部[重复]