【问题标题】:C++ inherit from a template using subclassC++ 使用子类从模板继承
【发布时间】:2014-06-09 15:58:04
【问题描述】:

我想创建一个父类Foo 继承自带有参数的模板自己的嵌套类Sub 但没有从Foo 中获取Sub,您有解决方案吗?

class Foo : public Bar<Sub>
{
    class Sub
    {
    }
}

谢谢

解决方案:没有“通用”方法可以做到这一点,因此最好的解决方案是将嵌套类带出。

【问题讨论】:

  • 不,你有循环依赖,所以不可能
  • 你确定吗? class Foo : Bar&lt;Foo&gt; 是可能的,为什么不是子类?
  • @56ka 因为在Bar&lt;Foo&gt; 的情况下,名称Foo 已经在范围内,而在Bar&lt;Sub&gt; 的情况下则不然。
  • 为什么Sub需要在Foo里面?
  • @lethal-guitar 就我而言,它实际上并不需要,因为它只是一个数据结构,但我很想知道是否有办法做到这一点。

标签: c++ templates inheritance nested-class


【解决方案1】:

不,这不可能直接,因为名称Sub 不在(也不可能)在您想使用它的范围内。如果您不能简单地将类移出(您需要将其作为成员访问),您可以通过将嵌套类移出一个非常独特的名称来解决它,在类中为其提供typedef,如果有必要,使它成为friend:

class Foo_Sub_ce60eba1_67fa_48a3_b5f5_fce89d717839
{
  // Contents...
};

class Foo : Bar<Foo_Sub_ce60eba1_67fa_48a3_b5f5_fce89d717839>
{
  typedef Foo_Sub_ce60eba1_67fa_48a3_b5f5_fce89d717839 Sub;
  friend Sub;
};

【讨论】:

  • 很有趣,所以没有“通用”的方法来做我想做的事情,所以最好的解决方案是把子类带出来。谢谢
猜你喜欢
  • 2018-05-23
  • 1970-01-01
  • 1970-01-01
  • 2012-10-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多