【问题标题】:Template class that refers to itself as a template template parameter?将自身称为模板模板参数的模板类?
【发布时间】:2010-06-16 10:25:11
【问题描述】:

这段代码:

template <template <typename> class T>
class A
{
};

template <typename T>
class B
{
    A<B> x;
};

不编译,我想因为A&lt;B&gt; 在B 的范围内被解释为A&lt;B&lt;T&gt; &gt;。

那么,如何在其范围内将B 作为模板模板参数传递?

【问题讨论】:

  • 不只是指定以下工作吗?因为 T 可以是任何简单类型或模板类型也............代码 _-------- 模板 class A { };
  • @Pardeep:我没有完全关注你。 A 的 T 是一个模板模板参数。它与template &lt;typename T&gt; class A{} 非常不同。
  • 您为什么要这样做?我从来没有看到有任何用处。
  • @DeadMG:我不这样做。然而,这是重现错误的最小代码。

标签: c++ templates template-templates


【解决方案1】:

试试这个:

template <typename T>
class B
{
    A< ::B > x; // fully qualified name for B
};

根据 C++ 标准 14.6.1/2,您应该使用模板的正常名称(即,来自封闭范围的名称,而不是注入的类名称)。

【讨论】:

  • 不错 :) 值得注意的是 ::B 之前的空格是必需的 :)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-01-29
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多