模板类作为函数参数类型,函数有三种写法:
1.指定传入类型
2.参数类型模板化
3.整个类模板化
#include<iostream>
#include<cstdio>
#include<string>
#include<typeinfo>
using namespace std;
template<typename T, typename R>
class P{
public:
T _name;
R _age;
public:
P(T name, R age){
this->_name = name;
this->_age = age;
}
void show(){
cout<<_name<<" "<<_age<<endl;
}
};
// 指定传入类型
void func(P<string, int> &p){
p.show();
cout<<"指定传入类型"<<endl;
}
// 参数类型模板化
template<typename T, typename R>
void func_a(P<T, R> &p){
p.show();
cout<<typeid(T).name()<<" "<<typeid(R).name()<<"参数类型模板化"<<endl;
}
// 整个类模板化
template<typename T>
void func_b(T p){
p.show();
cout<<typeid(T).name()<<"整个类模板化"<<endl;
}
int main()
{
P<string,int> p = P<string,int>("ok",10);
func(p);
func_a(p);
func_b(p);
return 0;
}