#include<iostream>
 #include<string>
 using namespace std;
 //全局函数的类内实现与类外实现
 template<typename T1, typename T2>
 class person;
 template<typename T1, typename T2>
 void showperson2(person<T1, T2> p) {
     cout << "全局函数做友元类外实现" << endl;
     cout << "T1的数据类型为" << typeid(T1).name() << endl;
     cout << "T2的数据类型为" << typeid(T2).name() << endl;
     cout << "姓名为:" << p.name << endl;
     cout << "年龄为:" << p.age << endl;
 }
 template<typename T1,typename T2>
 class person {
 public:
     friend void showperson2<>(person<T1, T2> p);
     T2 name;
 T1 age;
     person(T1 age,T2 name) {
         this->age = age;
         this->name = name;
     }
     friend void showperson(person<T1,T2> p) {
         cout << "全局函数做友元类内实现" << endl;
         cout <<"T1的数据类型为" << typeid(T1).name() << endl;
         cout << "T2的数据类型为" << typeid(T2).name() << endl;
         cout << "姓名为:" << p.name << endl;
         cout << "年龄为:" << p.age << endl;
     }
     
 };
void teest01() {
     person<int,string> p(18, "王二狗");
     showperson( p);
 }
 void test02() {
     person<int, string> p(56, "李云龙");
     showperson2<>(p);
 }
 int main() {
     teest01();
     test02();
     return 0;
 }










