从课堂内获取模板

时间:2014-06-14 03:31:45

标签: c++ templates

请考虑以下代码:

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

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

这不会编译,因为A中的B<A> b引用了类A<N>,而不是模板。如何从A的正文中获取模板A<N>

1 个答案:

答案 0 :(得分:2)

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

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

虽然这实际上是一个非常有趣的问题,因为B<A>似乎应该有效。来自N3936的§14.6.1[temp.local] / p1:

  

与普通(非模板)类一样,类模板也有   注入类名(第9条)。注入类名可以用作   模板名称类型名称。与它一起使用时    template-argument-list ,作为模板的 template-argument    template-parameter ,或作为最终标识符   它的朋友类模板声明的 elaborated-type-specifier   指的是类模板本身。否则,它相当于    template-name 后跟类的 template-parameters   括在&lt;&gt;。

中的模板

所以似乎B<A>应该等同于B<::A>。 GCC 4.8 accepts OP中的代码,尽管Clang 3.4 doesn't