//函数模板
//模板定义以关键字template开始,后跟模板参数列表
template<typename T>
int compare(const T& v1, const T& v2)
{
return v1 < v2 ? -1 : 1;
}
//模板类型参数
//可以用来指定返回类型或函数的参数类型,以及在函数体内用于变量声明或类型装换
//template<typename T>类型参数T前必须使用关键字class或typename
template<typename T>
T foo(T* p)
{
T tmp = *p;
return tmp;
}
//非类型模板参数
//一个非类型参数表示一个值而非一个类型,是通过一个特定的类型名而不是class或typename来指定的。
//非类型模板参数的模板实参必须是常量表达式。
template<unsigned N, unsigned M>
int comparech(const char(&p1)[N], const char(&p2)[M])
{
return strcmp(p1, p2);
}
//inline和constexpr
//inline和constexpr说明符放在模板参数列表后,返回类型之前
template<typename T>
inline T inmin(const T&, const T&)
{
T t;
return t;
}
int main()
{
//函数模板
cout << compare(2, 1) << endl;
comparech("h1", "haha");
return 0;
}