重载与模板、可变参数模板、模板特例化
C++ Primer学习笔记
重载与模板
函数模板可以被另一个模板或一个普通非模板函数重载。
- 当有多个重载模板对一个调用提供了同样好的匹配时,应选择最特例化的版本。
- 对于一个调用,如果一个非函数模板与一个函数模板提供了同样好的匹配,则选择非模板版本。
可变参数模板
一个可变参数模板就是一个接受可变数目参数的模板函数或模板类。可变数目的参数被称为参数包,模板参数包和函数参数包。
编写可变参数函数模板
- 一个类型名后面跟一个省略号表示零个或多个给定类型的非类型参数的列表。
//Args是一个模板参数包,rest是个函数参数包
template <typename T,typename... Args>
void foo(const T&t,const Args&... rest);
- sizeof…运算符求包中有多少个元素。
- 当既不知道想要处理的实参的数目也不知道它们的类型时,可变参数函数是很有用的。
template <typename T>
ostream &print(ostream &os,const T& t)
{
return os<<t;
}
template