C++ 模板类和友元

模板类的友元分三类:

1,非模板友元。

2,约束模板友元,即友元的类型取决于类被实例化时的类型。

3,非约束模板友元,即友元的所有具体化都是类的每一个具体化的友元。

1,模板类的非模板友元函数

count()函数不是通过对象调用的(它是友元不是成员函数),也没有对象参数,那么它如何访问hasfriend对象?

它可以访问全局对象;可以使用全局指针访问非全局对象;可以创建自己的对象;可以访问独立于对象的模板类的静态数据成员。

report()本身并不是模板函数,而只是使用一个模板作为参数,这意味着必须要为使用的友元定义显式具体化。

2,模板的约束模板友元函数

约束模板友元函数是在类外面声明的模板的具体化。

首先在类定义的前面声明每个函数模板。

然后,在函数中再次将模板声明为友元。声明中的<>指出这是模板具体化。

最后,为友元提供模板定义。

3,模板类的非约束模板友元函数

通过在类内部声明模板,可以创建非约束友元函数,即每个函数具体化都是每个类具体化的友元。对于非约束友元,友元模板类型参数与模板类类型参数是不同的。

此处的show() 函数具体化为:

void show< manyfriend<int> &, manyfriend<double> & > (manyfriend<int> & c, manyfriend<double> & d) ;

类模板的别名

C++11 允许将语法using = 用于模板,用于非模板时,这种语法和常规typedef 等价:

猜你喜欢

转载自blog.csdn.net/qq_42128241/article/details/81699386