簡體   English   中英

類內的模板化類的Typedef

[英]Typedef of templated class inside class

我想知道為什么以下代碼有效:

template <class T>
class A {
  public:
  typedef A* Pointer;
  typedef A<T>* OtherPointer;
};

int main()
{
  A<double> a;
  A<double>::Pointer b = &a;
  A<double>::OtherPointer c = &a;
  std::cout << b << " " << c << std::endl;
}

對我來說, OtherPointer的語法看起來很合邏輯。 我想知道Pointer那個。 類的名稱是否隱式包含在類定義中的模板化類型? 如果是這樣,為什么其他語法也能正常工作?

之所以起作用,是因為在類模板A<T> ,類型名稱A是完整描述的類型A<T>的別名。 您上面的模板定義等同於:

template <class T>
class A {
  public:
  typedef A<T>* Pointer;
  typedef A<T>* OtherPointer;
};

正如您以這種方式編寫時所看到的, A<T>::PointerA<T>::OtherPointer是相同類型的typedef (僅僅是A<T>本身)。 因此,您的示例編譯成功。

也許其他人可以引用此標准的相關部分。 應該說,我知道這是一個特別的領域,過去我在某些較早的編譯器中看到過錯誤,在該錯誤中,模板定義內的A不等同於A<T>

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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