从C++开始的编程生活(15)——模板知识补充

前言

本系列文章承接C++基础的学习,需要有++C语言的基础++ 才能学会哦~

第15篇主要讲的是有关于C++的模板知识补充
C++才起步,都很简单!!

目录

前言

模板进阶

非类型模板参数

模板的特化

函数模板特化

类模板特化

全特化

偏特化

模板分离编译

模板总结


模板进阶

非类型模板参数

之前学习的模板参数都是类型模板参数,如class,typename。而非类型模板是一个常量,在模板中可以当作常量使用。

同样的也可以使用缺省。

注意:非类型模板参数只能是整型,浮点数需要C++20标准及以上才可支持。

cpp 复制代码
template<class T, size_t N = 10>

模板的特化

特化,即特殊化处理。

函数模板特化

cpp 复制代码
//函数模板
template<class T>
bool Less (T left, T right)
{
    return left < right;
}

//特化
template<>
bool Less<Date*>(Date * left, Date* right)
{
    return left < right;
}

这里为Date类型,实现了一个特殊处理,所以在调用Less的时候Date优先使用特化。

这里举个例子,实际运用时,一般不将函数模板特化,写一个普通函数即可。

类模板特化

当类模板的参数符合条件时,走特殊化处理。

cpp 复制代码
//原模板
template<class T1, class T2>
class Data
{
public:
    Data(){ cout << "Date<T1,T2> " endl; }
private:
    T1 _d1;
    T2 _d2;
};

不满足任何特化条件的,在原模板中处理。

全特化

特化所有参数。

cpp 复制代码
template<>
class Data<int ,char>
{
public:
    Data() { cout<< "Data<int, char>" << endl; }
};

当Data的参数类型为 int和char时,匹配为全特化。

偏特化

特化部分参数。

cpp 复制代码
template<class T1>
class Data<T1, int>
{
public:
    Date() { cout << "Data<T1, int>" << endl; }
};

当Data的第二个参数类型为int时,匹配为偏特化。

当同时能匹配全特化和偏特化的情况时,优先走全特化。

模板分离编译

因为模板是需要实例化的,实例化之前,函数约等于没有定义。所以最好不要声明和定义分离,一起写在.h函数中。

当然了,如果我们写代码时提前显式实例化,就可以分离编译了,但这样也违背了我们使用模板的初衷。

模板总结

优点:

①复用代码,节省资源,迭代和开发有效率。

②增强代码灵活性

缺点:

①会导致代码量膨胀,编译时长增加

②如果出现模板编译错误,错误信息会变得凌乱,不好定位处理错误。

❤~~本文完结!!感谢观看!!接下来更精彩!!欢迎来我博客做客~~❤

相关推荐
为何创造硅基生物1 小时前
C语言 结构体内存对齐规则(通俗易懂版)
c语言·开发语言
吃好睡好便好2 小时前
在Matlab中绘制横直方图
开发语言·学习·算法·matlab
星寂樱易李2 小时前
iperf3 + Python-- 网络带宽、网速、网络稳定性
开发语言·网络·python
仰泳之鹅2 小时前
【C语言】自定义数据类型2——联合体与枚举
c语言·开发语言·算法
之歆2 小时前
DAY_12JavaScript DOM 完全指南(二):实战与性能篇
开发语言·前端·javascript·ecmascript
于小猿Sup3 小时前
VMware在Ubuntu22.04驱动Livox Mid360s
linux·c++·嵌入式硬件·自动驾驶
cen__y3 小时前
Linux12(Git01)
linux·运维·服务器·c语言·开发语言·git
AI人工智能+电脑小能手3 小时前
【大白话说Java面试题 第65题】【JVM篇】第25题:谈谈对 OOM 的认识
java·开发语言·jvm
社交怪人4 小时前
【算平均分】信息学奥赛一本通C语言解法(题号2071)
c语言·开发语言
郭涤生5 小时前
不同主机之间网络通信-以太网连接复习
开发语言·rk3588