【问题标题】:Is it possible for C++ subclasses to share the same template?C++ 子类是否可以共享相同的模板?
【发布时间】:2012-08-17 06:46:33
【问题描述】:

子类可以共享同一个模板吗?例如:

template <class T>
class A
{
private:
  T _aObj;
public:
  class B
  {
  public:
    T _bObj;
  };
};

AB 中都可以使用 T?

当我尝试这个时,我收到以下错误:

错误:A::B 不是模板

【问题讨论】:

  • 是的,有可能。您使用的是什么编译器以及如何使用代码?
  • 只是works
  • 你在做类似B&lt;int&gt;而不是A&lt;int&gt;::B的事情吗?
  • list&lt;int&gt;::iterator it这样的想法可能会有所帮助
  • @MarkB - 啊......多么失败......是的。我只是忽略了它。谢谢

标签: c++ templates scope nested-class


【解决方案1】:

是的,工作正常(在符合标准的编译器上)。

为什么这是合乎逻辑的一种思考方式是因为B 不仅仅是A 的一部分,它是A&lt;T&gt; 的一部分! T 不仅是 A 类型的一部分,而且也是 B 类型的一部分(它的正确名称是 A&lt;T&gt;::B。)

【讨论】:

    【解决方案2】:

    当然可以,尽管某些 C++ 编译器不允许这样做(想到飞思卡尔 HCS12 编译器)。但是任何风格的 GCC 或 MSVC 都可以编译这个没有问题。

    【讨论】:

      【解决方案3】:

      根据标准的最新公开draft,嵌套类的作用域和访问规则如下:

      9.7 嵌套类声明 [class.nest]

      1 一个类可以在另一个类中声明。声明的类 在另一个内称为嵌套类。嵌套类的名称是 本地到它的封闭类。嵌套类在其范围内 封闭类。

      11.7 嵌套类 [class.access.nest]

      1 嵌套类是成员,因此具有与 任何其他成员。封闭类的成员没有特殊的 访问嵌套类的成员;通常的访问规则(条款 11) 必须服从。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2014-12-19
        • 2015-10-09
        • 1970-01-01
        • 2019-05-18
        • 1970-01-01
        • 2012-09-13
        • 2010-09-21
        • 1970-01-01
        相关资源
        最近更新 更多