全局函数类内实现-直接在类内声明友元即可
全局函数类外实现-需要提前让编译器知道全局函数的存在
#include <iostream>
using namespace std;
//通过全局函数打印Person的信息//提前让编译器知道Person类存在
template <class T1, class T2>
class Person;//类外实现
template <class T1, class T2>
void printPerson2 (Person <T1, T2> p)
{cout << p.m_name << " " << p.m_age << endl;
}template<class T1, class T2>
class Person
{//全局函数,类内实现friend void printPerson (Person <T1, T2> p){cout << p.m_name << " " << p.m_age << endl;}//全局函数类外实现//加空模板参数列表//如果全局函数是类外实现,需要让编译器提前知道这个函数的存在friend void printPerson2<> (Person <T1, T2> p);public:Person (T1 name, T2 age){this->m_name = name;this->m_age = age;}private:T1 m_name;T2 m_age;
};void test01 ()
{Person<string, int> p("tom", 20);printPerson(p);
}void test02 ()
{Person <string, int> p("jack", 22);printPerson2(p);
}
int main ()
{test01();test02();return 0;
}
总结:
建议全局函数做类内实现,用法简单,而且编译器可以直接识别。