類模板做函數的參數
指定傳入類型
#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);