EasyC++模板重载

 更新时间:2021年12月17日 08:45:38   作者:梁唐  
这篇文章主要介绍了C++模板重载,重载的模板的函数特征,也就是入参的数量和类型必须有所不同,下面我们讲举例说明此内容,具有一定的参考价值,需要的小伙伴可以参考一下

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

1.重载模板

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

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

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

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[],两种形式本质上没有区别。

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

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.问题

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

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

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


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

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

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

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

相关文章

  • C++11右值引用和转发型引用教程详解

    C++11右值引用和转发型引用教程详解

    这篇文章主要介绍了C++11右值引用和转发型引用教程详解,需要的朋友可以参考下
    2018-03-03
  • C++你最好不要做的几点小结

    C++你最好不要做的几点小结

    整理如下,主要是方便刚开始接触c++的朋友
    2013-01-01
  • 一文弄懂C语言如何实现单链表

    一文弄懂C语言如何实现单链表

    单链表是由多个结点链接组成,它的每个结点包含两个域,一个数据域和一个链接域(地址域),下面这篇文章主要给大家介绍了关于C语言如何实现单链表的相关资料,需要的朋友可以参考下
    2021-09-09
  • C/C++中线程基本概念与创建详解

    C/C++中线程基本概念与创建详解

    线程是在进程中产生的一个执行单元,是CPU调度和分配的最小单元,其在同一个进程中与其他线程并行运行,他们可以共享进程内的资源。本文就和大家一起聊聊线程基本概念以及如何创建多线程,需要的可以参考一下
    2022-09-09
  • C语言实现颠倒栈的方法

    C语言实现颠倒栈的方法

    这篇文章主要介绍了C语言实现颠倒栈的方法,是针对数据结构中栈的常见操作技巧,需要的朋友可以参考下
    2014-09-09
  • C语言实现递归版扫雷游戏实例

    C语言实现递归版扫雷游戏实例

    大家好,本篇文章主要讲的是C语言实现递归版扫雷游戏实例,感兴趣的同学赶快来看一看吧,对你有帮助的话记得收藏一下
    2022-01-01
  • C++ 遍历某个文件夹下所有文件的方法步骤

    C++ 遍历某个文件夹下所有文件的方法步骤

    这篇文章主要介绍了C++ 遍历某个文件夹下所有文件的方法步骤,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-02-02
  • C++ 17标准正式发布! 更简单地编写和维护代码

    C++ 17标准正式发布! 更简单地编写和维护代码

    C++ 17 标准正式发布:终于能更简单地编写和维护代码了!本文为大家介绍了C ++ 17 主要特性,感兴趣的小伙伴们可以参考一下
    2017-12-12
  • C语言数据结构之扩展字符详解

    C语言数据结构之扩展字符详解

    掌握C语言数据结构的关键在于理解其核心概念,扩展字符作为其中的重要一环,对于编程人员来说至关重要,本指南将为您深入剖析扩展字符的相关知识,带您轻松掌握C语言数据结构,让我们一起探索这个令人着迷的领域吧!
    2024-03-03
  • c++实现加载so动态库中的资源

    c++实现加载so动态库中的资源

    下面小编就为大家带来一篇c++实现加载so动态库中的资源。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2016-12-12

最新评论