三种方式:
1、指定传入类型
2、参数模板化
3、整个类模板化
#include<iostream>
#include<typeinfo>
using namespace std;
template<class T1,class T2>
class Person
{
public:
Person(T1 name,T2 age)
{
m_Name = name;
m_Age = age;
}
void showPerson()
{
cout<<"name : "<<m_Name<<" age: "<<m_Age<<endl;
}
T1 m_Name;
T2 m_Age;
};
//1、指定传入类型
//类模板对象做函数参数
void printPerson01(Person<string,int>&p1)
{
p1.showPerson();
}
void test01()
{
Person<string,int> p1("Tom",18);
p1.showPerson();
//类模板的对象做函数的参数
printPerson01(p1);
}
//2、参数模板化
template<class T1,class T2>
void printPerson02(Person<T1,T2>&p)
{
p.showPerson();
//判断通用T的数据类型:typeid(T).name
cout<<"T1的类型为: "<<typeid(T1).name()<<endl;
cout<<"T2的类型为: "<<typeid(T2).name()<<endl;
}
void test02()
{
Person<string,int> p2("John",19);
printPerson02(p2);
}
//3、整个类模板化
template<class T>
void printfPerson3(T &p)
{
p.showPerson();
}
void test03()
{
Person<string ,int> p3("Amy",16);
printfPerson3(p3);
cout<<"T1的类型为: "<<typeid(T).name()<<endl;
}
int main()
{
test01();
test02();
test03();
return 0;
}