12.7 模板与友元
优质
小牛编辑
128浏览
2023-12-01
函数和整个类都可以声明为非模板类友元。使用类模板,可以声明各种各样的友元关系。友元可以在类模板与全局函数间、另一个类(可能是模板类)的成员函数间或整个类中(可能是模板类)建立。建立这种友元关系的符号可能很繁琐。
在下列X类的类模板中声明为:
template<class T>class X
下列友元声明:
friend void f1();
使函数f1成为从上述类模板实例化的每个模板类的友元。
在下列X类的类模板中声明为:
template<class T>class X
下列友元声明:
friend void f2(X< T > 6);
对特定类型T(如float)使函数f2(X<float>&)成为X<float>的友元。
在类模板中,可以声明另一个类的成员函数是类模板产生的任何模板类的友元。只要用类名和二元作用域运算符指定其它类的成员函数名。例如,在下列X类的类模板中声明为:
template<class T>class X
下列友元声明:
friend void A::f4();
使A类的成员函数f4成为上述类模板实例化的任何模板类的友元。
在下列X类的类模板中声明为:
template<class T>class X
下列友元声明:
friend void C< T >::f5( X< T > & );
对特定类型T(如float)使成员函数:
C<float>::f5( X< float> & );
成为 X<float> 模板类的友元函数。
在下列X类的类模板中声明为:
template<Class T>Class X
可以声明第二个类Y,如下所示:
friend class Y;
使Y类的每个成员函数成为X的类模板产生的每个模板类的友元。
在下列X类的类模板中声明为:
template<class T>class X
可以声明第二个类Z,如下所示:
friend class Z< T >;
使模板类用特定类型T(如float)实例化时,class Z<float> 的所有成员成为模板类X<float>的友元。