【C++模板】非类型模板参数
创始人
2024-03-15 17:44:36
0

目录

  • 什么是非类型模板参数?
  • 非类型的类模板参数
  • 非类型的函数模板参数
  • 非类型模板参数的局限性
    • 限制使用的场景
    • 支持使用的场景


什么是非类型模板参数?

在函数模板和类模板中,模板参数并不仅仅可以当作类型,还可以当作普通值。当使用普通值作为模板参数时,调用者就必须显式的指定这些值。

非类型的类模板参数

例如 设置一个固定长度的列表MyList。且模板参数有 数据类型容量大小
只有在增加新的元素时才会与容器大小进行比较。第二个模板参数就是非类型的类模板参数。

具体代码如下:

template
class MyList
{MyList();void PushBack();void PopFront();private:list m_data;uint32_t m_size;
};template
MyList::MyList():m_size{0}
{
}template
void MyList::PushBack()
{if (m_size >= SIZE){throw out_of_range("MyList<>::PushBack()  list is full! ");}// ... 功能代码
}template
void MyList::PopFront()
{// ... 功能代码
}

非类型的函数模板参数

同样函数模板也支持非类型的模板参数。例如配合C++的算法库algorithm中的std::transform方法进行全部元素增加。

#include 
#include 
#include using namespace std;template
T addValue(T const& x)
{return x + VAL;
}int main()
{vector vec{ 9,5,1,2,3,4 };transform(vec.begin(), vec.end(), vec.begin(), addValue);for (const auto& elem : vec){cout << elem << " ";}cout << endl;return 0;
}

函数模板当作回调函数使用时,就需要显式的指定函数模板参数类型。

非类型模板参数的局限性

非类型模板参数也是有要求的,不是所有的类型都支持。

限制使用的场景

  1. 浮点数不允许作为非类型模板参数
    在这里插入图片描述
    虽然提示使用C++20标准,但20也不支持。
  2. 类对象不允许作为非类型模板参数
    在这里插入图片描述
  3. 字符串常量不允许作为非类型模板参数
    在这里插入图片描述
  4. 全局指针不允许作为非类型模板参数
    在这里插入图片描述

支持使用的场景

  1. 常量整数
  2. 枚举值
  3. 对象指针

相关内容

热门资讯

修复 爱普生 EPSON L4... L4151 L4153 L4156 L4158 L4163 L4165 L4166 L4168 L4...
【PdgCntEditor】解... 一、问题背景 大部分的图书对应的PDF,目录中的页码并非PDF中直接索引的页码...
监控摄像头接入GB28181平... 流程简介将监控摄像头的视频在网站和APP中直播,要解决的几个问题是:1&...
在Word、WPS中插入AxM... 引言 我最近需要写一些文章,在排版时发现AxMath插入的公式竟然会导致行间距异常&#...
protocol buffer... 目录 目录 什么是protocol buffer 1.protobuf 1.1安装  1.2使用...
【前端】‘??‘与‘||‘有什... 0 问题 经常写const data = res.data.a ?? ''或者const d...
Windows10添加群晖磁盘... 在使用群晖NAS时,我们需要通过本地映射的方式把NAS映射成本地的一块磁盘使用。 通过...
牛客计算器的改良(Python... 文章目录1.题目描述2.输入描述:3.输出描述:4.示例15.分析6.代码7.结语 链接࿱...
正大杯|市调大赛|2023备赛... 关键信息 同时随着精细化养宠趋势的深入,宠物消费类目日渐丰富。 本报告通过 Niuco...
QGIS下载在线地图(Goog... 前言 国内外有很多在线地图下载软件,但功能单一,基本上只能下载数据&#x...