C++之函数模板
- 概述:
- 代码示例:
- .h:
- .cpp
- 模板注意事项:
- 普通函数与模板函数区别:
- 普通函数与模板函数的调用规则:
- 强制调用模板函数:
- over:
- 文末一句话:
概述:
函数模板: 函数模板就是利用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 <QMainWindow>
#include <QDebug>
class Template : public QMainWindow
{
Q_OBJECT
public:
Template(QWidget *parent = 0);
~Template();
private:
//template <class T>
template<typename T>//同上
//声明模板函数
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<class T>//表示T是一个未知的类型,模板参数类型
template<typename T>
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 <iostream>
using namespace std;
void myfunction(int a, int b)
{
cout << "普通函数调用!" << endl;
}
template<typename T>
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:
欢迎大家关注作者在文末评论、点赞、转发以及批评指正!
如果大家有更好的方法或有问题可以在文末评论一起讨论!
共同学习!
共同进步!
文末一句话:
余华在《活着》中写:
没有什么比时间更具有说服力了,因为时间无需通知我们,就可以改变一切。
想想的确是这样的。
时间不声不响,岁月不言不语,却悄无声息地就改变了很多东西。
它从不提前知会我们,也无需知会,因为我们总能后知后觉地明白一些事情。
真真假假,虚虚实实,你想知道,时间总会在最合适的时机告诉你答案。
岁月证明一切,一切自在人心。
更多推荐
C++之函数模板
发布评论