从类内部获取模板[重复]
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<A> b
中的A
指的是类A<N>
,而不是模板。如何从A<N>
的正文中获取模板A
?
【问题讨论】:
+1 @T.C.正是,谢谢!如果您发帖,我可以接受您的评论作为答案。 @par 这是一个clang bug,你的代码是有效的。 【参考方案1】:我认为绕过这个问题的最简单方法是:
template <int N>
struct A
B<::A> b;
;
虽然这实际上是一个非常有趣的问题,因为看起来B<A>
应该可以工作。来自 N3936 的 §14.6.1 [temp.local]/p1:
与普通(非模板)类一样,类模板有一个 注入类名(第 9 条)。注入的类名可以用作 模板名称或类型名称。当它与一个 template-argument-list,作为模板的 template-argument 模板参数,或作为最终标识符 elaborated-type-specifier 的友元类模板声明,它 指类模板本身。否则等价于 template-name 后跟类的 template-parameters .
中包含的模板
所以看起来B<A>
应该等同于B<::A>
。 GCC 4.8 accepts OP 中的代码,虽然 Clang 3.4 doesn't。
【讨论】:
啊。我正在使用 Clang。以上是关于从类内部获取模板[重复]的主要内容,如果未能解决你的问题,请参考以下文章