4

子类是否可以共享相同的模板?例如:

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

哪里 T 可以同时用于AB

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

错误:A::B 不是模板

4

3 回答 3

6

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

为什么这是合乎逻辑的一种思考方式是因为B不仅仅是一部分A,它是一部分A<T>T不仅是 for 类型的一部分A,而且也是 for B(它的正确名称应该是A<T>::B.)

于 2012-08-21T21:10:07.430 回答
1

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

于 2012-08-21T21:10:25.293 回答
1

从最新可用的标准公开草案中,嵌套类的范围和访问规则如下:

9.7 嵌套类声明 [class.nest]

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

11.7 嵌套类 [class.access.nest]

1 嵌套类是成员,因此具有与任何其他成员相同的访问权限。封闭类的成员对嵌套类的成员没有特殊的访问权限;应遵守通常的访问规则(第 11 条)。

于 2012-08-21T21:16:21.167 回答