C++类模版2
类模版实例化出的对象,向函数传参的方式。
1.一共三种传入的类型 --直接显示对象的数据类型
2.参数模版化 --将对象中的参数编程模版进行传递
3.整个类模版化 --将这个对象类型 模版化进行传递
#include <iostream>
using namespace std;//类模版对象做函数参数
template <typename T1,typename T2>
class Person{public:Person(T1 name, T2 age){this->m_Name=name;this->m_Age=age;}void showPerson(){cout<<"Name: " << m_Name << ", Age: " << m_Age << endl;}T1 m_Name;T2 m_Age;
};//1.指定传入类型
//使用引用的方式进行传入,这样我们就可以直接拿到这个person的本体
void printPerson(Person<string,int> &p)
{p.showPerson();
}void test01()
{Person<string,int> p("孙悟空",100);printPerson(p);}int main() {test01();return 0;
}
将参数模版化
//将参数模版化
template <typename T1, typename T2>
void printPerson2(Person<T1,T2> &p)
{p.showPerson();cout<<"T1的类型为: "<<typeid(T1).name()<<endl;cout<<"T2的类型为: "<<typeid(T2).name()<<endl;
}
void test02()
{Person<string,int> p("猪八戒",99);printPerson2(p);
}int main() {//test01();test02();return 0;
}
因此最终其输出为这个。
将整个类都模版化
template <typename T>
void printPerson3(T &p)
{p.showPerson();cout<<"T1的类型为: "<<typeid(T).name()<<endl;//这里的T是Person<string,int>类型cout<<"T2的类型为: "<<typeid(typename T::T2).name()<<endl; //使用typename来获取类模版中的类型
}
//将整个类都模版化
void test03()
{Person<string,int> p("唐僧",30);p.showPerson();cout<<"T1的类型为: "<<typeid(string).name()<<endl;cout<<"T2的类型为: "<<typeid(int).name()<<endl;
}int main() {//test01();test03();return 0;
}
在实际开发中,第一种最实用。