C ++子类是否可以共享相同的模板?

时间:2012-08-21 21:07:01

标签: c++ templates scope nested-class

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

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

哪个T可用于AB

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

  

错误:A :: B不是模板

3 个答案:

答案 0 :(得分:6)

是的,可以正常使用(在符合标准的编译器上)。

一种思考为什么这是合乎逻辑的方法是因为B不仅仅是A的一部分,它是A<T>的一部分! T不仅是A类型的一部分,也是B的一部分(正确的名称为A<T>::B。)

答案 1 :(得分:1)

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

答案 2 :(得分:1)

从标准的最新公共draft开始,嵌套类的范围和访问规则如下:

9.7嵌套类声明[class.nest]

  

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

11.7嵌套类[class.access.nest]

  

1嵌套类是成员,因此具有相同的访问权限   任何其他成员。附上课程的成员没有特别之处   访问嵌套类的成员;通常的访问规则(条款   11)应遵守。