子类是否可以共享相同的模板?例如:
template <class T>
class A
{
private:
T _aObj;
public:
class B
{
public:
T _bObj;
};
};
哪个T可用于A
和B
?
当我尝试这个时,我收到以下错误:
错误:A :: B不是模板
答案 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)应遵守。