类模板碰到友元函数

来源:互联网 发布:射精后强制刺激 知乎 编辑:程序博客网 时间:2024/06/07 16:56

当类模板碰到友元函数时,普通友元函数必须提前声明。

template<class T> class MyClass;//声明类模板存在

//声明友元函数存在
template<class T> void fun(MyClass<T> myclass);
template<class T> ostream& operator<<(ostream& os, MyClass<T> &myclass);
template<class T>
class MyClass
{
public:
T ta;
//普通友元函数,必须提前声明
friend void fun(MyClass<T> myclass);
//左移操作符在VS下不需提前声明,但GCC编译器需要提前声明
friend ostream& operator<<<>(ostream& os, MyClass<T> &myclass);//空模板语法
MyClass(T a)
{
ta = a;
}
};
template<class T>
void fun(MyClass<T> myclass)
{
cout << myclass.ta << endl;
}
template<class T>
ostream& operator<<(ostream& os, MyClass<T> &myclass)
{
os << myclass.ta << endl;
return os;
}
void test()
{
MyClass<int> myclass(20);
fun<int>(myclass);
cout << myclass;
}
0 0