簡體   English   中英

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

[英]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可以在AB

當我嘗試這個時,我收到以下錯誤:

錯誤: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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM