[英]Is it possible for C++ subclasses to share the same template?
子類是否可以共享相同的模板? 例如:
template <class T>
class A
{
private:
T _aObj;
public:
class B
{
public:
T _bObj;
};
};
哪個T可以在A
和B
?
當我嘗試這個時,我收到以下錯誤:
錯誤:A :: B不是模板
是的,工作正常(在符合標准的編譯器上)。
一種思考為什么這是合乎邏輯的方法是因為B
不僅僅是A
一部分,它是A<T>
! T
不僅是A
類型的一部分,也是B
的類型(正確的名稱是A<T>::B
)
可以肯定的是,雖然有些C ++編譯器不允許它(飛思卡爾HCS12編譯器會浮現在腦海中)。 但任何GCC或MSVC的風格都可以編譯這個沒問題。
根據標准的最新可用公共草案 ,嵌套類的范圍和訪問規則如下:
9.7嵌套類聲明[class.nest]
1可以在另一個類中聲明一個類。 在另一個內聲明的類稱為嵌套類。 嵌套類的名稱是其封閉類的本地名稱。 嵌套類位於其封閉類的范圍內。
11.7嵌套類[class.access.nest]
1嵌套類是成員,因此具有與任何其他成員相同的訪問權限。 封閉類的成員對嵌套類的成員沒有特殊訪問權限; 應遵守通常的訪問規則(第11條)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.