以下是一个简单的 c++ 程序,它使用我的 MinGW 编译器编译,并按预期执行:
#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;
line交朋友。
不幸的是,我不知道为什么这一行需要这样写。直觉上,我会期待类似的东西friend class B<T>
,但是,这不会编译。
新引入的含义U
也不清楚,因为A
' 和B
' 的依赖类型T
在这两种情况下都是。
所以,简而言之,我会很感激任何关于这条线的语法是如何派生或推导的。