//一、普通模板函数
//1、模板函数的申明和定义
template<
typename T>
int
compare(
const T& left,
const T& right)
{
if(left<right)
{
return -
1;
}
else
return
1;
}
//1、模板函数的调用方式
compare<
int>(
1,
2);
//二、成员模板函数
class
Printer
{
public:
template<
typename T>
void
print(
const T&t)
{
cout<<t<<endl;
}
}
Printer P;
P.print<
const
char *>(
"abc");
成员模板函数不能是虚函数,成员模板函数不能是虚函数,成员模板函数不能是虚函数。
实参推断:
为了方便实用,除了直接为函数模板指定参数类型之外,我们还可以让编译器从传递给函数的
实参推断类型参数,这一功能被称为模板实参推断。
例如
compare(
1,
2),模板实参推断为int类型
compare(
1.0,
2.0),模板实参推断为double类型。
返回值类型与参数类型完全无关,那么就需要显示的指定返回值类型
template<
typename T1,
typename T2,
typename T3>
T1
sum(T2 v2, T3 v3) {
return
static_cast<T1>(v2 + v3);
}
template<
typename T>
void
func(T& t) {
//通用模板函数
cout <<
"In generic version template " << t << endl;
}
模板函数的重载
template<
typename T>
void
func(T* t) {
//指针版本
cout <<
"In pointer version template "<< *t << endl;
}