类模板做函数的参数
指定传入类型
#include <iostream>
using namespace std;
//类模板
template <class NameType, class AgeType = int> //类模板可以有默认类型
class Person
{
public:
Person(NameType name, AgeType age)
{
this->m_Name = name;
this->m_Age = age;
}
void showPerson()
{
cout << "姓名:" << this->m_Name << " 年龄: " << this->m_Age <<"岁"<< endl;
}
NameType m_Name;
AgeType m_Age;
};
//1 指定传入类型
void doWork( Person<string ,int> & p )
{
p.showPerson();
}
void test01()
{
Person <string, int> p("小李子",10);
doWork(p);
}
int main()
{
test01();
return 0;
}
运行,得
姓名:小李子 年龄: 10岁
参数模板化
#include <iostream>
using namespace std;
//类模板
template <class NameType, class AgeType = int> //类模板可以有默认类型
class Person
{
public:
Person(NameType name, AgeType age)
{
this->m_Name = name;
this->m_Age = age;
}
void showPerson()
{
cout << "姓名:" << this->m_Name << " 年龄: " << this->m_Age << endl;
}
NameType m_Name;
AgeType m_Age;
};
//2 参数模板化
template<class T1 ,class T2>
void doWork2(Person<T1, T2> & p)
{
//如何查看类型
cout << typeid(T1).name() << endl;
cout << typeid(T2).name() << endl;
p.showPerson();
}
void test02()
{
Person <string, int> p("小李子", 18);
doWork2(p);
}
int main()
{
test02();
return 0;
}
运行
class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >
int
姓名:小李子 年龄: 46
整体模板化
//3 整体模板化
template<class T>
void doWork3(T&p)
{
cout << typeid(T).name() << endl;
p.showPerson();
}
void test03()
{
Person <string, int> p("劣人", 18);
doWork3(p);
}
运行
class Person<class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >,int>
姓名:劣人 年龄: 18
总结——类模板做函数的参数
//1 ------------------------指定传入类型
void doWork( Person<string ,int> & p )
//1 使用
Person <string, int> p("小李子",10);
//2 ------------------------参数模板化
template<class T1 ,class T2> void doWork2(Person<T1, T2> & p)
//2 使用
Person <string, int> p("小李子", 18);
//3 ------------------------整体模板化
template<class T> void doWork3(T&p)
//3 使用
Person <string, int> p("小李子", 18);