添加链接
link之家
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接

C++提供了函数模板(function template)。 所谓函数模板,实际上是建立一个通用函数,其函数类型和形参类型不具体指定,用一个虚拟的类型来代表。这个通用函数就称为函数模板

凡是函数体相同的函数都可以用这个模板来代替,不必定义多个函数,只需在模板中定义一次即可。在调用函数时系统会根据实参的类型来取代模板中的虚拟类型,从而实现了不同函数的功能。

下面通过一个返回最大值的函数来举例。

定义函数模板的一般形式为:
template < typename T>

返回值类型 函数名 (参数表) {

template < class T>

返回值类型 函数名 (参数表) {

其中返回值类型和参数类型可以用T来指代

// main.cpp // TestTemplateFunc // Created by cc on 14-3-30. #include <iostream> using namespace std; //声明模板函数 template <class T> T calcMaxValue(T x, T y); int main(int argc, const char * argv[]) { //调用函数时,如果想让T指代int类型,则传入int实参,返回int类型 int maxVal = calcMaxValue(15, 5); //如果想让T指代float类型,则传入的参数就是float类型,返回的类型也是float类型 //其他类型同理,使用函数模板可以减少函数重载的使用,优化代码量 float maxVal2 = calcMaxValue(231.12f, 555.231f); cout << "较大值:" << maxVal << endl; cout << "较大值:" << maxVal2 << endl; return 0; //定义模板函数,返回值类型和形式参数都用T来表示 template <class T> T calcMaxValue(T x, T y) { return (x > y) ? x : y; 输出结果:

本文由CC原创总结,如需转载请注明出处: http://blog.csdn.net/oktears/article/details/22583207

C++提供了函数模板(function template)。所谓函数模板,实际上是建立一个通用函数,其函数类型和形参类型不具体指定,用一个虚拟的类型来代表。这个通用函数就称为函数模板。凡是函数体相同的函数都可以用这个模板来代替,不必定义多个函数,只需在模板中定义一次即可。在调用函数时系统会根据实参的类型来取代模板中的虚拟类型,从而实现了不同函数的功能。下面通过一个返回最大值的函数来举例。
我们知道在C++ 模板 编程中如果我们特化或是偏特化某个 模板 类, 我们需要重写整个 模板 类中的所有 函数 , 但是这些代码通常是非常相似的, 甚至在某些情况下可能只有一两个 函数 会不一样,其他 函数 都是一样的。在这种情况下,同时存在多份相同的代码,对我们维护这些代码是非常不利的, 我们好只需要特化其中不一样的那个 函数 。   比如下面这个 模板 类: template struct Base     //other function void Func(){ cout << "primary function " <<
函数 模板 : 1.建立通用的 函数 函数 的类型和形参的类型不用指定,而用一个虚拟的类型来代表。将数据类型参数化。 2.凡是 函数 体相同的多个 函数 都可以使用 函数 模板 。 有以下重载 函数 : int Max(int, int, int); float Max(float, float, float); double Max(double, double, double); 建立一种 模板 函数 模板 的声明: template <typename _Ty1&
模板 Template )指C++程序设计语言中采用类型作为参数的程序设计,支持通用程序设计。 下面以不使用 函数 模板 ,和使用 函数 模板 来实现同一功能的示例: 例子:实现计算一个数的幂次方的 函数 power,接受正幂次方数,如果是负幂次方数,就让结果等于0. 1.不使用 模板 如果不使用 函数 模板 ,对于需要实现的功能相同,但参数的数据类型却不同的情况,则需要定义多个不同数据类型的 函数 : //对于实现 整数类型 的幂次方 函数 int power(int base,int exponent) int result =
函数 模板 介绍 函数 模板 案例普通 函数 函数 模板 的区别普通 函数 函数 模板 的调用规则三级标题四级标题五级标题六级标题 1. 函数 模板 ,实际上是建立一个通用 函数 ,它所用到的数据的类型(包括返回值类型、形参类型、局部变量类型)可不具体指定,而是用一个虚拟的类型来代替(实际上是用一个标识符来占位),等发生 函数 调用时再根据传入的实参来逆推出真正的类型。这个通用 函数 就称为 函数 模板 template <typename T> 函数 声明或定义 注: template :声明创建 模板 ;typename:表明其
1 模板 机制剖析 1.1 编译过程 hello.cpp程序是高级c语言程序,这种程序易于被人读懂。为了在系统上运行hello.c程序,每一条c语句都必须转化为低级的机器指令。然后将这些机器指令打包成可执行目标文件格式,并以二进制形式存储于磁盘中。 预处理(Pre-processing) -> 编译(Compiling) ->汇编(Assembling) -> 链接(Linking)
C++11中,可以使用 模板 参数包( template parameter pack)和可变参数 模板 函数 (variadic function template )来实现可变参数 模板 模板 参数包是一种可以接受任意数量、任意类型的 模板 参数的机制,它使用`...`语法表示,例如: template <typename... Args> void foo(Args... args) // ... 上面的代码中,`Args`是一个 模板 参数包,它可以接受任意数量、任意类型的 模板 参数。 可变参数 模板 函数 是一种可以接受任意数量、任意类型的 函数 参数的机制,它使用 模板 参数包和 函数 参数包( function parameter pack)来实现。例如: template <typename... Args> void bar(Args... args) int n = sizeof...(Args); // 获取参数数量 std::cout << n << std::endl; std::cout << (args + ...) << std::endl; // 展开参数序列,并求和 上面的代码中,`Args... args`是一个 函数 参数包,它可以接受任意数量、任意类型的 函数 参数。在 函数 体中,我们使用`sizeof...(Args)`来获取参数数量,并使用`(args + ...)`来展开参数序列,并求和。 需要注意的是,C++11中的可变参数 模板 只能用于 函数 模板 中,不能用于类 模板 中。如果想要在类 模板 中使用可变参数 模板 ,可以使用 模板 特化的方式来实现。