以下は、私の MinGW コンパイラでコンパイルされ、期待どおりに実行される単純な C++ プログラムです。
#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()
アクセスするので、LINEで友達作り。 A<T>::a
A<T>
B<T>
template <class U> friend class B;
残念ながら、なぜこの行をこのように書く必要があるのかわかりません。直感的には のようなものを期待friend class B<T>
していましたが、これはコンパイルされません。
との依存型は両方の場合にあるため、新たに導入された の意味もU
不明です。A
B
T
つまり、要するに、この行の構文がどのように派生または推定されるかについて、少しでも光を当てていただければ幸いです。