【问题标题】: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,你的代码是有效的。

标签: c++ templates


【解决方案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。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-11-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多