小工具知识网

当前位置: 首页 > 行业知识 > 【C++】模板+模板特化

行业知识

【C++】模板+模板特化

2026-11-10 07:49:43 来源:互联网转载

模板

  • 泛型编程
  • 模板
    • 函数模板
      • 定义
      • 原理分析
      • 函数模板的实例化
      • 模板参数的匹配原则
      • 类模板
      • 定义
        • 类模板的实例化
        • 非类型模板参数
        • 模板特化
          • 定义
          • 函数模板特化
          • 类模板特化
          • 应用实例
          • 模板分离编译
            • 原理分析
            • 解决方法
            • 模板总结

              铁汁们,今天给大家分享一篇模板+模板特化,来吧,开造⛳️

              泛型编程

              定义:编写跟具体类型无关的通用代码,是实现代码复用的一种手段。模板是泛型编程的基础。

              • 问:如何实现一个通用的swap函数?
              • 答:写成函数模板,不能在函数重载了。原因:代码复用率低,重载的函数仅是类型不同,若出现了其他新的类型,代码的可维护性降低,若函数中有一处出错了,可能会导致所有的重载函数均出错。

                模板

                模板的本质:本来应该要由我自己写的多份类似代码(除类型不同,代码功能、逻辑相同),现在不需要我自己去写了,我只需要提供一个模板,编译器根据我的实例化,帮我写出代码。

                函数模板

                定义

                函数模板代表了一个函数家族,函数模板与类型无关,在使用时被实例化,根据实例化的类型产生具体类型的函数版本。

                • Tips : typename是用来定义模板参数的关键字,也可以使用class,但不能用struct代替class。
                  #pragma once#define _CRT_SECURE_NO_WARNINGS 1#includeusing namespace std;namespace zzx {    //函数模板templatevoid swap(T& left, T& right){T& tmp = left;left = right;right = tmp;}}int main(){int a = 3;int b = 4;cout templatereturn left + right;}double Add(double& left, double& right){return left + right;}int Add(int& left, int& right){return left + right;}}int main(){int a = 1;int b = 2;cout templatereturn left + right;}}int main(){cout T1 a ;T2 b;}int main(){funtemplateT* a;size_t top;size_t capacity;};}int main(){zzx::stack//非类型模板参数,只能是整形常量template  private:T a[N];  //定义一个静态数组size_t size;};}int main(){//array为STL中的一个容器,底层为静态数组,不会初始化,只会在越界的时候进行检查报错zzx::arraypublic:Date(int year = 1900, int month = 1, int day = 1): _year(year), _month(month), _day(day){}bool operatorreturn (_year 

上一篇:列表解析扩展使用

下一篇:测速服务器很慢怎么办?