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(10) << endl;// T为int,实例化出int compare (const int&, const int&)
 
vector<int> vec1{1, 23}, vec2{456};
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 模板和泛型编程)实例化

C++ Primer 5th笔记(chap 16 模板和泛型编程)可变参数模板

C++ Primer 5th笔记(chap 16 模板和泛型编程)模板实参