小工具知识网

当前位置: 首页 > 行业知识 > C++ 模板保姆级详解——template<class T>(什么是模板?模板分哪几类?模板如何应用?)

行业知识

C++ 模板保姆级详解——template<class T>(什么是模板?模板分哪几类?模板如何应用?)

2026-11-09 18:33:52 来源:互联网转载

目录

一、前言

二、 什么是C++模板

泛型编程的思想 

 C++模板的分类

 三、函数模板

 函数模板概念

 函数模板格式

函数模板的原理

 函数模板的实例化

隐式实例化

 显式实例化

模板支持多个模板参数

 模板参数的匹配原则

四、类模板 

 类模板的概念

 类模板格式

 类模板的实例化

 类模板的分离编译

五、总结

六、共勉 


一、前言

        在我们学习C++时,常会用到函数重载。而函数重载,通常会需要我们编写较为重复的代码,这就显得臃肿,且效率低下。重载的函数仅仅只是类型不同,代码的复用率比较低,只要有新类型出现时,就需要增加对应的函数。此外,代码的可维护性比较低,一个出错可能会导致所有的重载均出错。

       那么,模板的出现,就让这些问题有了解决方案,所以本次博客将为大家详细的讲解C++的模板!!

二、 什么是C++模板

        程序设计中经常会用到一些程序实体:它们的实现和所完成的功能基本相同,不同的仅 仅是所涉及的数据类型不同。而模板正是一种专门处理不同数据类型的机制。

       模板------是泛型程序设计的基础(泛型generic type——通用类型之意)。

 

        函数、类以及类继承为程序的代码复用提供了基本手段,还有一种代码复用途径——类属类型(泛型),利用它可以给一段代码设置一些取值为类型的参数(注意:这些参数 的值是类型,而不是某类型的数据),通过给这些参数提供一些类型来得到针对不同类 型的代码。

泛型编程的思想 

         首先我们来看一下下面这三个函数,如果学习过了C++函数重载 和 C++引用 的话,就可以知道下面这三个函数是可以共存的,而且传值会很方便

void Swap(int& left, int& right){int temp = left;left = right;right = temp;}void Swap(double& left, double& right){double temp = left;left = right;right = temp;}void Swap(char& left, char& right){char temp = left;left = right;right = temp;}

        但是真的很方便吗?这里只有三种类型的数据需要交换,若是我们需要增加交换的数据呢?再CV然后写一个函数吗?

        这肯定是不现实的,所以很明显函数重载虽然可以实现,但是有一下几个不好的地方:

  • 重载的函数仅仅是类型不同,代码复用率比较低,只要有新类型出现时,就需要用户自己增加对应的函数
  • 代码的可维护性比较低,一个出错可能所有的重载均出错

           

            那是否能做到这么一点,告诉编译器一个模子,让编译器根据不同的类型利用该模子来生成代码

    ​

    ⭐总结:

            所以,总结上面的这么一个技术,C++的祖师爷呢就想到了【模版】这个东西,告诉编译器一个模子,然后其余的工作交给它来完成,根据不同的需求生成不同的代码

    这就是泛型编程:编写与类型无关的通用代码,是代码复用的一种手段。模板是泛型编程的基础

     C++模板的分类

    1️⃣: 函数模板(function tempalte):使用泛型参数的函数(function with generic parameters)

    2️⃣:类模板(class template):使用泛型参数的类(class with generic parameters)

     三、函数模板

     知晓了模版的基本概念后,首先我们要来看的就是【函数模版】

     函数模板概念

            函数模板代表了一个函数家族,该函数模板与类型无关,在使用时被参数化,根据实参类型产生函数的特定类型版本
            通过函数模板,可以编写一种通用的函数定义,使其能够适用于多种数据类型,从而提高代码的复用性和灵活性。

     函数模板格式

    template返回值类型 函数名(参数列表){    //……}注意:typename是用来定义模板参数关键字,也可以使用class(切记:不能使用struct代替class)

    因此,交换函数就可以这样套用模板:

    templatevoid Swap(T& left, T& right){T temp = left;left = right;right = temp;}int main(){int x = 2, y = 3;cout 

上一篇:怎么开启公众号服务器地址?

下一篇:服务器不认电脑怎么解决?