[英]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>::Pointer
和A<T>::OtherPointer
是相同類型的typedef
(僅僅是A<T>
本身)。 因此,您的示例編譯成功。
也許其他人可以引用此標准的相關部分。 應該說,我知道這是一個特別的領域,過去我在某些較早的編譯器中看到過錯誤,在該錯誤中,模板定義內的A
不等同於A<T>
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.