说明:本笔记是参考《C++ Primer(3rd)》中文版
函数模板提供了一种机制,通过它可以保留函数定义和函数调用的语义(在一个程序位置上封装了一段代码,确保在函数调用之前实参只被计算一次),而无需象宏方案那样绕过C++的强类型检查。如:
template <class Type>
Type min(Type a,Type b)
{
return a<b? a : b;
}
关键字template总是放在模板的定义与声明的最前面。关键字后面是用逗号分隔的模板参数表,它用尖括号(<>)括起来。该列表是模板参数表,不能为空。模板参数分为:(1) 模板类型参数,代表一种类型;(2) 模板非类型参数,代表一个常量表达式。
模板类型参数由关键字class或typename后加一个标识符构成。在函数的模板参数表中,这两个关键字的意义相同。它们表示后面的参数名代表一个潜在的内置或用户定义的类型。
模板非类型参数由一个普通的参数声明构成。模板非类型参数表示该参数名代表了一个潜在的值,而该值代表了模板定义中的一个常量。如:
template <class Type,int size>
Type min(Type(&arr)[size]);
规则:
1. 如果在全局域中声明了与模板参数同名的对象、函数或类型,则该全局名将被隐藏。
2. 在函数模板定义中声明的对象或类型不能与模板参数同名。
3. 模板类型参数名可以被用来指定函数模板的返回位。
4. 模板参数名在同一模板参数表中只能被使用一次,但可在多个函数模板声明或定义之间被重复使用。
通过将关键字typename引入到C++中,我们可以对模板定义进行分析。为了分析模板定义,编译器必须能够区分出是类型以及不是类型的表达式。如(Parm代表一个类):
template <class Parm,class U>
Parm minus(Parm* array,U value)
{
Parm::name * P; // 这是一个指针声明还是乘法?答案是乘法
}
编译器不知道name是否为一个类型,因为它只有在模板被实例化之后才能找到Parm表示的类的定义。为了让编译器能够分析模板定义,用户必须指示编译器哪些表达式是类型表达式。告诉编译器一个表达式是类型表达式的机制是在表达式前加上关键字typename。如:
template <class Parm,class U>
Parm minus(Parm* array,U value)
{
typename Parm::name * P; //这是指针声明
}
函数模板也可被声明为inline或extern。但应把指示符放在模板参数表后面,而不是在template前面:
template<typename Type>
inline
Type min(Type,Type);
分享到:
相关推荐
函数模板 建立一个通用的函数,函数类型和形参不具体指定,用一个虚拟的类型代表。 只要是函数体是相同的就可以用这个模板代替。 (只适用于函数的参数个数相同而类型不同,且函数体一致的情况,如果参数个数不同,则...
C++基础的学习笔记(其中的代码源件可私信留言) C++中的空头程序 使用C++书写hello world 学习变量 学习常量 标识符命名规则 数据类型 运算符 程序流程结构 数组 函数 指针 结构体
Pascal转C++学习笔记——1.基本知识
C++学习笔记--函数指针 函数指针 程序运行期间。每个函数都会占用一段连续的内存空间。而函数名就是该函数所占内存区域的起始地址(也称“入口地址”)。我们可以将函数入口地址赋给一个指针变量,使该指针变量...
其中,template为关键字,表示定义一个模板(可以是函数模板或类模板),尖括号表示模板参数,模板类型参数使用关键字class或typename开始,其后是一个用户定义的合法的标识符。 如果用户在调用函数模板时显式标识...
C++学习路线(csdn)————程序
谭浩强老师c++课本函数模板例题,c++函数模板使用,供大家学习使用。
个人网课学习笔记
c++入门语法及使用 - c++学习路线(csdn)————程序
(1)输人并运行所给的参考程1,并将程序中的注释部分也输人计算机,体会和理解程序的基本格式规范。 (2)编写一个函数把华氏温度转换为摄氏温度,转换公式为C= (F一32)*5/9。 (3)编写重载函数Maxl可分别求取两...
一 函数重载 二函数模板 三类模板 的说明及代表代码
关于学习C++《STL模板库》以及学习《STL源码剖析》的学习笔记。
P167~184C++类和函数模板学习笔记.docx
练习 C++中函数模板、类模板的创建和使用方法。 (1) 理解模板的作用。 (2) 学习函数模板及其声明方法,掌握模板函数及其生成方法。 (3) 学习函数模板的两种不同的实例化方法。 (4) 学习类模板的声明与使用方法。
Cocos2d-x学习笔记——完全掌握C++ API与游戏项目开发.zip
C++函数模板是一种通用的代码结构,可以用于创建可以处理多种数据类型的函数。函数模板通过参数化类型来实现代码的重用和泛化。 代码中,我们定义了一个函数模板 findMax(),用于在给定的容器中查找最大值。该函数...
C++函数声明和定义 声明是告诉编译器一些信息,以协助编译器进行语法分析,避免编译器报错。而定义是告诉编译器生成一些代码,并且这些代码将由连接器使用。即:声明是给编译器用的,定义是给连接器用的。这个说明...
函数模板与宏定义。代码复用的不同方式的定义,包含了用函数模板实现代码复用,用宏定义展开为函数的定义与使用。
c++ 基础 类外定义函数 调用函数 基础