服务器之家:专注于VPS、云服务器配置技术及软件下载分享
分类导航

PHP教程|ASP.NET教程|Java教程|ASP教程|编程技术|正则表达式|C/C++|IOS|C#|Swift|Android|VB|R语言|JavaScript|易语言|vb.net|

服务器之家 - 编程语言 - C/C++ - EasyC++模板重载

EasyC++模板重载

2022-07-14 08:45梁唐 C/C++

这篇文章主要介绍了C++模板重载,重载的模板的函数特征,也就是入参的数量和类型必须有所不同,下面我们讲举例说明此内容,具有一定的参考价值,需要的小伙伴可以参考一下

 文章转自 公众号:Coder梁(ID:Coder_LT)

1.重载模板

函数模板可以使得同一个函数对不同类型使用,非常地方便。但有的时候类型不同,只是通过模板是没办法解决的, 可能逻辑上也会有所区别,这个时候只是使用模板是无法解决的。

为了满足这种需求,我们可以像是重载函数那样重载模板。和常规的函数一样,重载的模板的函数特征,也就是入参的数量和类型必须有所不同。

举个例子:比如我们之前定义了一个函数模板用来交换两个变量的值。如果我们要交换的不只是变量,而是两个数组,就必须要修改逻辑了。

?
1
2
3
4
5
template <typename T>
void Swap(T &a, T &b);
 
template <typename T>
void Swap(T *a, T *b, int n);

可以看到我们额外传入了一个int n,它表示数组的长度。另外,我们入参的类型也发生了变化,不再是模板类型T的引用,而是指针了。因为我们要接收的是一个数组,而数组在函数传递当中都是以指针的形式进行的。所以这里要写成指针,当然也可以写成这样:T a[],两种形式本质上没有区别。

所以我们实现的话会是这样:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
template <typename T>
void Swap(T &a, T &b) {
    T temp = a;
    a = b;
    b = temp;
}
 
template <typename T>
void Swap(T *a, T *b, int n) {
    for (int i = 0; i < n; i++) {
        Swap(a[i], b[i]);
    }
}

2.问题

到这里,相信大家也能看出一点问题。

假设我们有这样一个模板函数:

?
1
2
template <typename T>
void Swap(T a, T b);

虽然理论上类型T是万能类型,什么类型都可以接受。但我们操作的时候会有很多问题,比如我们执行a = b,对于数组类型就会报错。

再比如我们执行a > b,很多类型也无法进行比较大小。再比如进行算术运算等等,很多类型比如指针、数组或者结构体也没办法进行算术运算。

总之模板的功能是很局限的,有的时候只能处理某些类型,很难通用覆盖所有情况。当然有的时候也是有一些其他办法绕开的,比如结构体也可以重载比较运算符,也可以重载一些算术运算符等等。

到此这篇关于C++模板重载的文章就介绍到这了,更多相关C++模板重载内容请搜索服务器之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持服务器之家!

延伸 · 阅读

精彩推荐
  • C/C++c++代码实现tea加密算法的实例详解

    c++代码实现tea加密算法的实例详解

    这篇文章主要介绍了c++代码实现tea加密算法,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考...

    飞刀又见飞刀6812021-08-31
  • C/C++C语言 数据类型详细介绍

    C语言 数据类型详细介绍

    本文主要讲解C语言 数据类型,这里整理了详细的数据类型的资料,希望能帮助刚刚开始学习C语言的同学...

    C语言教程网6622021-04-13
  • C/C++C++ 二叉树的镜像实例详解

    C++ 二叉树的镜像实例详解

    这篇文章主要介绍了C++ 二叉树的镜像实例详解的相关资料,需要的朋友可以参考下 ...

    he_shuai204582021-05-14
  • C/C++C/C++中抽象类详解及其作用介绍

    C/C++中抽象类详解及其作用介绍

    这篇文章主要介绍了C/C++中抽象类详解及其作用,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下...

    我是小白呀7562021-12-28
  • C/C++c++中八大排序算法

    c++中八大排序算法

    本篇文章主要介绍了八大排序算法,详细的介绍了八个算法思想,实现代码,稳定性,时间复杂度等,具有一定的参考价值,有需要的可以了解一下。...

    真实的归宿8152021-04-20
  • C/C++详解在VScode中添加代码块(含C++指令生成代码)

    详解在VScode中添加代码块(含C++指令生成代码)

    这篇文章主要介绍了详解在VScode中添加代码块(含C++指令生成代码),文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,...

    TKLA10952021-11-01
  • C/C++用纯C语言实现贪吃蛇游戏

    用纯C语言实现贪吃蛇游戏

    这篇文章主要为大家详细介绍了用纯C语言实现贪吃蛇游戏,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...

    迪迪迪迪迪迪10682021-12-03
  • C/C++c++ #include是怎么样工作的?

    c++ #include是怎么样工作的?

    大多数园友可能对“#include”比较熟悉,因为我们写C/C++程序的时候都会写的字符串之一,但是它是具体怎么工作的?或者它的原理是什么呢?...

    C++教程网1672020-11-15