下面是一个简单的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