C++ Primer 5th笔记(chap 16 模板和泛型编程)定义
Posted thefist11
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C++ Primer 5th笔记(chap 16 模板和泛型编程)定义相关的知识,希望对你有一定的参考价值。
1. 函数模板
- 类型参数:用typename或class标识
template <typename T> int compare (const T &v1,const T &v2)
{
if (v1 < v2) return -1;
if (v2 < v1) return 1;
return 0;
}
编译器会实例化多个版本的模板实例
cout << compare(1, 0) << endl;// T为int,实例化出int compare (const int&, const int&)
vector<int> vec1{1, 2,3}, vec2{4, 5,6};
cout << compare (vec1, vec2) << endl; // T为vector<int>,实例化出int compare (const vector<int>&, const vector<int>&)
1.1 非类型模板参数
- 一个非类型参数nontype parameter可以是一个整型、一个指向对象或函数类型的指针或(左值)引用。
- 绑定到非类型整型参数的实参必须是一个常量表达式。
- 绑定到指针或引用非类型参数的实参必须具有静态的生存期
template<unsigned N,unsigned M>
int compare (const char (&p1) [N],const char (&p2) [M])
{
return strcmp(p1, p2) ;
}
compare ("hi","mom" );->
编译器的版本:
int compare (const char (&p1) [3],const char(&p2) [4])
- 不能用一个普通(非static)局部变量或动态对象作为指针或引用非类型模板参数的实参。指针参数也可以用nullptr或一个值为0的常量表达式来实例化。
- 在模板定义内,模板非类型参数是一个常量值。在需要常量表达式的地方,可以使用非类型参数,eg. 指定数组大小。
1.2 inline和constexpr的函数模板
函数模板可以声明为inline或constexpr的,如同非模板函数一样。 inline 或constexpr说明符放在模板参数列表之后,返回类型之前:
//正确: inline说明符跟在模板参数列表之后
template <typename T> inline T min (const T&,const T&) ;
//错误: inline说明符的位置不正确
inline template <typename T> T min(const T&,const T&) ;
以上是关于C++ Primer 5th笔记(chap 16 模板和泛型编程)定义的主要内容,如果未能解决你的问题,请参考以下文章
C++ Primer 5th笔记(chap 16 模板和泛型编程)std::move
C++ Primer 5th笔记(chap 16 模板和泛型编程)模板特例化
C++ Primer 5th笔记(chap 16 模板和泛型编程)类模板特例化
C++ Primer 5th笔记(chap 16 模板和泛型编程)实例化