下面是一個簡單的C++程序,它與我的MinGW的編譯器編譯,並如預期執行:試圖瞭解「模板<class U>朋友類B」;語法
#include <iostream>
template <class T> class A {
T a;
template <class U> friend class B;
public:
A<T> (T t) : a(t) {}
};
template <class T> class B {
A<T> aa;
public:
B<T> (T t) : aa(t) {}
T getT() const {return aa.a;}
};
int main() {
B<int> b(5);
std::cout << "> " << b.getT() << std::endl;
}
由於B<T>::getT()
訪問私人A<T>::a
成員,A<T>
使得B<T>
與template <class U> friend class B;
線的朋友。
不幸的是,我不知道爲什麼這條線需要這樣寫。直覺上,我會預期像friend class B<T>
,但是,這不會編譯。
新引入U
的含義是不明確爲好,因爲A
的和B
的依賴型是在兩種情況下T
。
所以,總之,我很感激任何關於這條線的語法是如何派生或推導的。
如果你嘗試'朋友B類'有什麼錯誤? –
Walter