c++ 中的函数模板

#include <iostream>

using namespace std;

template <typename T>
void fun(T a)
{
    cout << "void fun(T1 a)" << endl;
}

template <typename T1, typename T2>
void fun(T1 a, T2 b)
{
    cout << "void fun(T1 a, T2 b)" << endl;
}

void fun(int a, float b)
{
    cout << "void fun(int a, float b)" << endl;
}

void main()
{
    int a = 0;
    float b = 0.0;
    fun(a);
    fun(a, b);    //普通函数void fun(int a, float b)已经能完美匹配,于是调用普通函数
    fun(b, a);    //这个调用,函数模板有更好的匹配,于是调用函数模板
    fun<>(a, b);    //限定只使用函数模板
    system("pause");
}

编译器会优先去调用普通函数,但是当函数模板有更好的匹配时或使用限定符<>时,编译器就会去匹配函数模板。

总结
    - 函数模板是泛型编程在C++中的应用方式之一
    - 函数模板能够根据实参对参数类型进行推导
    - 函数模板支持显示的指定参数类型
    - 函数模板是C++中重要的代码复用方式
    - 函数模板通过具体类型产生不同的函数
    - 函数模板可以定义任意多个不同的类型参数
    - 函数模板中的返回值类型必须显示指定
    - 函数模板可以像普通函数一样重载
---------------------
作者:火焰山大白菜
来源:CSDN
原文:https://blog.csdn.net/lms1008611/article/details/81985815
版权声明:本文为博主原创文章,转载请附上博文链接!

原文地址:https://www.cnblogs.com/nanqiang/p/10888857.html

时间: 2024-10-10 01:41:46

c++ 中的函数模板的相关文章

函数模板和模板函数

1.1函数模板的声明函数模板可以用来创建一个通用的函数,以支持多种不同的形参,避免重载函数的函数体重复设计.它的最大特点是把函数使用的数据类型作为参数.函数模板的声明形式为:template<typename 数据类型参数标识符><返回类型><函数名>(参数表){ 函数体}其中,template是定义模板函数的关键字:template后面的尖括号不能省略:typename(或class)是声明数据类型参数标识符的关键字,用以说明它后面的标识符是数据类型标识符.这样,在以

函数模板与模板函数

1.函数指针--指针函数  函数指针的重点是指针.表示的是一个指针,它指向的是一个函数,例子: int   (*pf)(); 指针函数的重点是函数.表示的是一个函数,它的返回值是指针.例子: int*   fun(); 2.数组指针--指针数组  数组指针的重点是指针.表示的是一个指针,它指向的是一个数组,例子: int   (*pa)[8]; 指针数组的重点是数组.表示的是一个数组,它包含的元素是指针.例子; int*   ap[8]; 3.类模板--模板类(class   template-

函数模板注意事项

一.模板重载 ①和常规重载一样,被重载的模板的函数特征标必须不同. ②并非所有的模板参数都必须是模板参数类型.例如: template<class T> void swap(T& a,T& b); template<class T> void swap(T* a,T* b,int n);//第三个参数类型为具体类型int,而不是通用类型 二.显示具体化 对于某些类型的参数,我们的算法可能略有不同,比如:对于一个结构体,虽然将一个结构体赋给另一个结构体是允许的,但是,

[c++][语言语法]函数模板和模板函数

参考:http://blog.csdn.net/beyondhaven/article/details/4204345 1.函数模板的声明和模板函数的生成 1.1函数模板的声明 函数模板可以用来创建一个通用的函数,以支持多种不同的形参,避免重载函数的函数体重复设计.它的最大特点是把函数使用的数据类型作为参数. 函数模板的声明形式为: template<typename 数据类型参数标识符> <返回类型><函数名>(参数表) {     函数体 } 其中,template

C++入门经典-例9.1-函数模板,函数模板的作用,使用数组作为模板参数

1:函数模板不是一个实在的函数,因此编译器不能为其生成可执行的代码.定义函数模板只是一个对函数功能框架的描述,在具体执行时,将根据传递的实际参数决定其功能. 2:函数模板定义的一般形式如下: template <类型形式参数> 返回类型 函数名(形式参数表) { ...//函数实现 } 其中template为关键字,表示定义一个模板,尖括号"<>"中为模板参数,模板参数主要有两种,一种是模板类型参数,另一种是模板非类型参数.上述代码中定义的模板使用的是模板类型参

C++中的函数重载与模板

函数就像工具,工具有好多种,我们就以螺丝刀为例来感受一下它和函数重载和模板的一些相似关系. 螺丝刀的种类有很多,常见的是一字型和梅花型, 每种类型从小到大又有好多个号. 我们根据螺丝样式和大小 选择使用那种类型的和选择多大号的螺丝刀. 螺丝刀就干了一件事,拧螺丝,也就是说各种螺丝刀他们的功能是相 同的,只是类型不同而已. 一.函数重载 在C++中,允许用一个函数名来表达功能相同,只是操作类型(形参个数和类型)不同的函数,这就是函数重载. 编译器能够根据他们各自的实参和形参以及参数的个数进行最佳分

c++中函数模板的使用

在程序设计中,经常要使用到函数体相同的函数,如果我们要根据所使用的参数表不同来决定调用具体哪个函数时,我们经常使用的方式是进行函数重载,但是当我们的函数很多的时候会发现实现起来很不方便.所以c++提供了函数模板的概念,这和类模板实现起来的方式是类似的. 下面举个例子,我们经常要使用的冒泡排序算法,被排序的对象可能是double,int,char,float等等,下面是实现代码: template <typename T1,typename T2> void bubble(T1 *A, T2 l

thinkphp模板中使用函数的方法

1.执行函数并输出返回值:格式:{:function(-)} 例如,输出U函数的返回值: {:U('User/insert')} 编译后的PHP代码是 <?php echo U('User/insert');?> 2.执行函数但不输出 : 格式:{~function(-)} 例如,调用say_hello函数: {~say_hello('ThinkPHP')} 编译后的PHP代码是: <?php say_hello('ThinkPHP');?> thinkphp模板中使用函数的方法

函数模板在c++动态顺序表中的大作用

函数模板提供了一种机制通过它我们可以保留函数定义和函数调用的语义在一个程序位置上封装了一段代码确保在函数调用之前实参只被计算一次. 函数模板提供一个种用来自动生成各种类型函数实例的算法程序员对于函数接口参数和返回类型中的全部或者部分类型进行参数化(parameterize)而函数体保持不变. 函数模板使用注意事项: 1.每个函数模板前边都需要添加模板声明例如:template<typename T> 2.在模板类的使用时,注意其类型改变,例如: template<typename T&g