博客
关于我
C++之函数模板
阅读量:604 次
发布时间:2019-03-11

本文共 2019 字,大约阅读时间需要 6 分钟。

C++之函数模板

概述:

函数模板: 函数模板就是利用C++内部提供的一种定义类型,定义一种具有相同结构、方式而参数类型不同的模板. 模板: 就是用来套用的。

创建举例:
template <class T>
void func(T &a){}
template是关键字,class位置可以写作typename或者class都行,是为了说明后面T的类型。
两种方式使用函数模板:
1、自动推导
int a = 19;
int b = 45;
mySwap(a, b);
2、显式指定类型
mySwap<int>(a, b);//此处<>中表示T的类型

代码示例:

.h:

#ifndef TEMPLATE_H#define TEMPLATE_H#include 
#include
class Template : public QMainWindow{ Q_OBJECTpublic: Template(QWidget *parent = 0); ~Template();private: //template
template
//同上 //声明模板函数 void printArray(T *array,int size);};#endif

.cpp

#include "Template.h"Template::Template(QWidget *parent)    : QMainWindow(parent){       const int max= 5;    int Array[max] = {   10,20,30,40,50};    float fArray[max] = {   1.1,1.2,1.3,1.4,1.5};    const char* cArray[max] = {   "one","two","three","four","five"};    printArray(Array,max);    printArray(fArray,max);    printArray(cArray,max);}Template::~Template(){   }//template
//表示T是一个未知的类型,模板参数类型template
void Template::printArray(/*Template::*/T *array, int size){ for(int i = 0;i < size;i++) { qDebug() << array[i]; }}

模板注意事项:

1、自动类型推导必须推导出一致的数据类型T,才可以使用

2、模板必须要确定出T的数据类型才可以使用
3、函数模板可以发生重载
4、自定义类型不建议使用函数模板

普通函数与模板函数区别:

1、普通函数调用可以发生隐式类型转换

2、函数模板 采用自动类型推导 不可以发生隐式类型转换
3、函数模板 采用显示指定类型 可以发生隐式类型转换

普通函数与模板函数的调用规则:

1、如果普通函数与函数模板都可以实现,优先调用普通函数

2、可以通过空模板参数列表的形式调用函数模板
3、函数模板可以发生重载
4、如果模板可以产生更好的匹配,优先调用模板

强制调用模板函数:

#include 
using namespace std;void myfunction(int a, int b){ cout << "普通函数调用!" << endl;}template
void myfunction(T a, T b){ cout << "模板函数调用!" << endl;}void test00(){ int a = 10; int b = 90; myfunction(a,b); myfunction<>(a, b);}int main(){ test00(); return 0;}

over:

欢迎大家关注作者在文末评论、点赞、转发以及批评指正!

如果大家有更好的方法或有问题可以在文末评论一起讨论!
共同学习!
共同进步!

文末一句话:

余华在《活着》中写:

没有什么比时间更具有说服力了,因为时间无需通知我们,就可以改变一切。
想想的确是这样的。
时间不声不响,岁月不言不语,却悄无声息地就改变了很多东西。
它从不提前知会我们,也无需知会,因为我们总能后知后觉地明白一些事情。
真真假假,虚虚实实,你想知道,时间总会在最合适的时机告诉你答案。
岁月证明一切,一切自在人心。

转载地址:http://hgltz.baihongyu.com/

你可能感兴趣的文章
MySQL8.0.29启动报错Different lower_case_table_names settings for server (‘0‘) and data dictionary (‘1‘)
查看>>
MYSQL8.0以上忘记root密码
查看>>
Mysql8.0以上重置初始密码的方法
查看>>
mysql8.0新特性-自增变量的持久化
查看>>
Mysql8.0注意url变更写法
查看>>
Mysql8.0的特性
查看>>
MySQL8修改密码报错ERROR 1819 (HY000): Your password does not satisfy the current policy requirements
查看>>
MySQL8修改密码的方法
查看>>
Mysql8在Centos上安装后忘记root密码如何重新设置
查看>>
Mysql8在Windows上离线安装时忘记root密码
查看>>
MySQL8找不到my.ini配置文件以及报sql_mode=only_full_group_by解决方案
查看>>
mysql8的安装与卸载
查看>>
MySQL8,体验不一样的安装方式!
查看>>
MySQL: Host '127.0.0.1' is not allowed to connect to this MySQL server
查看>>
Mysql: 对换(替换)两条记录的同一个字段值
查看>>
mysql:Can‘t connect to local MySQL server through socket ‘/var/run/mysqld/mysqld.sock‘解决方法
查看>>
MYSQL:基础——3N范式的表结构设计
查看>>
MYSQL:基础——触发器
查看>>
Mysql:连接报错“closing inbound before receiving peer‘s close_notify”
查看>>
mysqlbinlog报错unknown variable ‘default-character-set=utf8mb4‘
查看>>