模板就是一个公式,由实参自动推断类型。
下面是一个模板应用的简单例子:
函数模板
template<typename T>
bool is_same(const T& first_one,const T& second_one)
{
return first_one==second_one;
}
其中编译器会根据实参的类型来实例化出一个模板。
参考以下例子:
cout<<"1 and 2"<<(is_same(1,2) ? "equal" : "not equal") <<endl;
其中is_same的实例化如下:
// template<typename T>
bool is_same(const int& first_one,const int& second_one)
{
return first_one==second_one;
}
// T=int
其中,T被推断为int。
类模板
我们常用的C++标准库中就有很多类模板,如vector
一般来说,我们必须为类模板提供模板参数。
如:
vector<int> a;
其中vector的模板参数就是我们提供的int。
默认模板参数
我们可以为模板提供默认模板参数。
此后,我们可以直接使用默认参数。
使用默认参数的方法是:书写一个空尖括号对
设置默认模板参数的方法是,在class T或typename T后书写一个=,再写上你所想要的类型
参考下面的例子:
template<typename T=wchar_t>
struct example{
//...
};
example<int> a;
example<> b;//等价于example<wchar_t>
更多与模板知识相关的内容(包、包拓展、std::forward模板和模板特例化)
见下一章。