子类是否可以共享相同的模板?例如:
template <class T>
class A
{
private:
T _aObj;
public:
class B
{
public:
T _bObj;
};
};
哪里 T 可以同时用于A
和B
?
当我尝试这个时,我收到以下错误:
错误:A::B 不是模板
子类是否可以共享相同的模板?例如:
template <class T>
class A
{
private:
T _aObj;
public:
class B
{
public:
T _bObj;
};
};
哪里 T 可以同时用于A
和B
?
当我尝试这个时,我收到以下错误:
错误:A::B 不是模板
是的,工作正常(在符合标准的编译器上)。
为什么这是合乎逻辑的一种思考方式是因为B
不仅仅是一部分A
,它是一部分A<T>
!T
不仅是 for 类型的一部分A
,而且也是 for B
(它的正确名称应该是A<T>::B
.)
可以肯定的是,尽管某些 C++ 编译器不允许这样做(想到飞思卡尔 HCS12 编译器)。但是任何风格的 GCC 或 MSVC 都可以编译这个没有问题。
从最新可用的标准公开草案中,嵌套类的范围和访问规则如下:
9.7 嵌套类声明 [class.nest]
1 一个类可以在另一个类中声明。在另一个类中声明的类称为嵌套类。嵌套类的名称是其封闭类的本地名称。嵌套类在其封闭类的范围内。
11.7 嵌套类 [class.access.nest]
1 嵌套类是成员,因此具有与任何其他成员相同的访问权限。封闭类的成员对嵌套类的成员没有特殊的访问权限;应遵守通常的访问规则(第 11 条)。