非类型模板参数知识点梳理

函数模板知识点梳理 函数模板代表一个函数家族。 通常而言,并不是把模板编译成一个可以处理任何类型的单一实体,而是对于实例化模板参数的每种类型,都从模板产生一个不同的实体。 关于模板编译,会有2个过程,分别发生在:(请注意VC++与GCC之间的不同) 1. 实例化之前,先检查模板代码本身,查看语法是否正确,在这里会发现错误的语法,如遗漏分号等。 2. 在实例化期间,检查模板代码,查看是否所有的调用都有效 阅读详情
对于函数模板和类模板,模板参数并不局限于类型,普通值也可以作为模板参数。
1. 非类型的类模板
template <typename T, int MAXSIZE>
class Stack {
private:
    T elems[MAXSIZE];
...
};


template <typename T, int MAXSIZE>
Stack<T, MAXSIZE>::Stack()
: numElems(0)
{
}


2. 非类型的函数模板参数

template <typename T, int VAL>
T addValue(T const& v)
{
    return x + VAL;
}


std::transform(v.begin(), v.end(), v.begin(), addValue<int, 5>);
};

3. 非类型的模板参数的限制
非类型的模板参数是有限制的。通常而言,它们可以是常整数(包括枚举类型)或者指向外部链接对象的指针。
<strong>浮点数和类对象是不允许作为非类型模板参数的。</strong>
例如下面2个模板类是编译不过的:

template <double VAT>
double process(double v)
{
    return v * VAT;
}
template <std::string name>
class MyClass {
...
};


由于字符串文字是内部链接对象(因为两个具有相同名称但处于不同模板的字符串,是两个完全不同的对象),所以不能使用它们来作为模板实参:
template <const char* name>
class MyClass {
...
};


MyClass<"hello"> x; // error

另外,也不能使用全局指针作为模板参数:

template <const char* name>
class MyClass {
...
};


const char* s = "hello";
MyClass<s> x;   // error


然而,可以这样使用:
template <const char* name>
class MyClass {
...
};


extern const char s[] = "hello";
MyClass<s> x; // ok


全局字符数组s由"hello"初始化,是一个外部链接对象。



C++ 超详细知识点梳理+思维导图 本文为博主复习完C++基础知识后总结的知识点,重要知识点都有简单demo示例。欢迎,思维导图层级太多,页面上放不下,若有需要直接哦。 阅读详情

相关推荐

树莓派用网线连着电脑,但是找不到它的ip 以及设置静态IP

第一次的话,树莓派默认是没有ssh的。需要把内存卡取出来,新建一个ssh文件,这个简单,新建一个txt文件重命名就好了。 如果前面配置了连接wifi的conf文件,它是会自动去连接wifi的,wifi连不上,它才会去尝试有线连接。所以把它的wifi关了,才会自动用网线连接。 另外,建议设置静态ip连接,这样避免网络连接突然中断。具体在etc/dhcpcd.conf文件中,把这几行前面的#去掉,然后后面的信息改成自己的就好了。 具体改法: 第一行是ip地址,这个找到自己电脑的ip段,然后改后面两个数字就好了

wander_ing的博客 1万+

【C++】模板进阶 —— 非类型模板参数 | 特化 | 模板的分离编译

本文主要介绍了C++模板的进阶用法,包括非类型模板参数和模板特化。非类型模板参数允许使用整型常量作为模板参数,实现静态栈等场景下的灵活控制。模板特化分为函数模板特化和类模板特化,其中类模板特化又包含全特化和偏特化两种形式。全特化针对所有模板参数进行特殊处理,而偏特化可以是对部分参数特化或对参数类型进一步限制(如指针/引用类型)。特化机制可以有效解决模板在特定类型下处理不当的问题,为不同数据类型提供定制化实现。

浮光掠影 4430

别再让信号‘撞墙’了!手把手教你用嘉立创阻抗计算器搞定PCB高速线(附免费压层结构选择)

本文详细介绍了如何使用嘉立创阻抗计算器解决PCB高速线设计中的阻抗匹配问题,避免信号反射和传输损耗。通过免费压层结构选择和五步计算法,帮助工程师快速掌握USB3.0差分线等高速信号的设计技巧,提升PCB设计效率和信号质量。

weixin_30736301的博客 279

【C++学习】模板进阶——非类型模板参数 | 模板的特化 | 分离编译

介绍了模板中的非类型模板参数,模板的特化,以及类模板的分离编译。

weixin_63726869的博客 1881

基于STM32的红外测温系统设计

为了实现本次的毕业设计,我搜集了大量的文献与资料,通过这些资料了解到红外测温的优点,与实现所需的基本器件,并设计了几个方案,最终选择了STM32作为主控芯片,为此还查阅了关于STM32的资料,在此次设计中采用的是MLX90614医用红外测温模块,通过查阅其数据手册了解其测量精度高且自带温度补偿,所以选择了该传感器作为红外测温模块,本次设计到此已经基本完成,硬件部分和软件部分的设计已基本完成。

weixin_112233的博客 1421

逆变器方案(工频全套)工频正弦波逆变器开发板全套设计资

逆变器方案(工频全套)工频正弦波逆变器开发板,24V-72V通用12只TO-247封装MOS管,额定输出功率6500W以下;配有触摸屏操作界面,运行数据一目了然,带市电互补UPS功能,可选择电池优先或市电有限工作,我们的开发板均从实战角度出发,让您的学习更便捷,包含全套设计资料,PCB.原理图.源代码,程序均有中文注释,MCU选用美国微芯公的PIC-8位单片机,民用数字电源首选单片机,抗干扰能力强,运行稳定。...

m0_73494033的博客 892

三、非类型模板参数(Nontype Template Parameters)

对于函数模板和类模板,模板参数不一定必须是类型,也可是是常规的数值。当以类型(type)作为模板参数的时候,代码中未决定的是类型;当以一般的数字(non-type)作为模板参数的时候,代码中待定的内容便是某些数值。使用者这种模板必须要显示指定数值,模板才能实例化。1、非类型类模板参数(Nontype Class Template Parameters)之前章节中的列子中Stack类中使用vector

Mr.Gao的博客 5959

【Linux系统】Kdenlive软件多机位同音频视频同步化处理

Kdenlive简介 官网链接:https://kdenlive.org/zh/ 命令行安装: apt-get install kdenlive Kdenlive能够进行多轨道视频编辑,可以使用和调整多条音频、视频轨道。每条轨道可以按需进行单独锁定、静音。 Kdenlive多机位同音频视频同步化处理步骤 1. 新建Kdenlive文件 选择<文件>-<新建>,建立新的kdenlive文件,初始设置为<视频轨:2>,<音频轨:2>。 视.

qq_31550269的博客 1884

非类型模板参数 Nontype Template Parameters

除了类型可以作为模板参数,普通值也可以作为模板函数,即非类型模板参数(Nontype Template Parameters)。前一章使用的例子 使用的是标准库中的容器管理元素,也可以使用固定大小的 ,它的优势是内存管理开销更小,数组的大小可以交给用户指定。 使用该模板需要同时指定类型和个数。 用于指定 的大小。非类型模板参数也可以有默认值。 非类型函数模板参数 也可以为函数定义非类型模板参数。 也可以指定一个模板参数,由该参数之前的参数推断出其类型。 或者保证传值的类型和指定的类型相同。 非类型模板

Dong_HFUT的博客 3706

QT+Halcon实现螺纹检测

工业上要检测螺丝的内外直径、内外牙距、内外角度,现在比较好用的图像处理库,开源的opencv,收费的有halcon。为了实现螺纹检测,和对比螺纹检测拿个库比较好。分别用opencv和halcon实现了螺纹检测,通过对比发现用halcon实现的效果比较。现在用博客把实现过程记录下来: 1、需要检测的螺纹数据如下: 2、为了实现检测螺丝以上数据,螺纹内径、螺纹外径、螺纹外牙距、螺纹...

专注现代C++实战,从核心语法到高性能编程,助力开发者深入掌握系统级编程精髓。 7050

手机VPN的连接方法分享

6、返回到VPN页面,可以看到刚刚新添加的VPN,点击开启VPN后面的开关。5、在打开的添加VPN的页面中输入VPN的信息后点击右上角的“保存”按钮。7、待VPN开关开启后,可以看到添加的VPN正在连接的提示信息了。2、在打开的小米手机设置页面中点击“更多连接方式”的菜单项。3、然后在打开的更多连接方式页面中点击VPN的菜单项。4、在打开的VPN设置页面中点击“添加VPN”的按钮。1、首先在手机屏幕左右的滑动,找到手机的设置图标。

惠惠软件 3万+

非类型模板参数与类模板

模板在实际中应用非常广泛,C++STL底层用了大量模板来适配各种情形。模板在实际开发中,大大提高了效率,以便于更快的迭代开发。

fjhugjkdsd的博客 1284

交换机初始化配置详解

MGMT或称MGT(Management Port,管理端口)是一个可以连接计算机的三层主机端口,如下图所示。只需使用一条双绞线跳线,就可以将计算机的以太网端口与交换机的MGMT端口连接在一起,实现对交换机的配置与管理。也就是说,可以使用MGMT端口代替Console端口实现对交换机或交换机堆叠的网络管理。MGMT端口既可用于交换机的初始化,也可以在交换机初始化完成后,以Telnet、Web浏览器或Cisco CNA方式进行管理。当将计算机连接到独立的交换机时,连接方式如下图所示。

悦分享 1993

一文快速学会 dart

本文介绍了Dart语言基础知识和Flutter安装指南。主要内容包括: Flutter安装配置:下载安装包、配置环境变量(建议使用国内镜像源) Dart变量声明:var(类型固定)、final(运行时常量)、const(编译时常量)的区别 数据类型操作:数值运算、类型转换、字符串处理(拼接、查找、替换等) 编程规范建议:运算符优先级处理、命名规范(小驼峰变量、大驼峰类名)、避免单字母变量名等 实用代码示例:包含数学运算、字符串模板、正则表达式等常用操作 文章适合有编程基础的开发者快速掌握Dart核心语法,为

wish_you_luck的博客 1195

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

C++:非类型模板参数,模板特化以及模板的分离编译

前面的文章梳理了模板初阶的一些用法,在后面梳理了STL的一些容器的用法后,下面将用到含有STL的模板部分知识进行梳理。这里我们首先实例化了一个vector<int>的对象,然后插入两个数据,最后写了一个打印函数来打印有迭代器的容器的数据,但这里我们运行后出现了上图的错误,这个错误出现的原因是第四行我们使用模板导致的,因为在我们使用模板进行定义时,在没有对它进行前编译器无法识别,在没有实例化时,这一个定义,编译器无法识别,因为这一句话既可以当作,也可以当作,虽然作为变量时加上后面的。

2301_81791624的博客 885

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

关于模板、可变模板参数、模板类型推导、左值、右值、左值引用、右值引用、万能引用梳理

是一种属性,表示可以出现在表达式左边的值,可以被取地址,往往对应一块内存,比如 int value = 1;value就是左值,可以被取地址 &value。

weixin_44795474的博客 1029

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

python web知识点梳理

掌握的知识点:如何去创建项目和应用,并成功运行出项目创建项目的命令:django-admin startproject proj8进入项目文件夹:cd proj8创建应用的命令:python manage.py startapp app1配置应用:在settings.py中添加应用运行项目:python manage.py runserver# 定义一个学生类的模型:学号,姓名,年龄。

苏婳 2712

C++模板梳理

下面是一个类模板,它和普通类的区别只是多了一个下面展示了如何使用类模板Test//Test t;// Error!T t;// Error!// Test t3;// Error!Test<void>我们稍微带入一下,模板的T是void那T t是?所以很合理C++17 增加了类模板实参推导,也就是说类模板也可以像函数模板一样被推导,而不需要显式的写明模板类型参数了,这里的Test被推导为Test<int>。Test t(1);

m0_52329237的博客 1092

C++ 第八章 模板编程完整知识点梳理

模板是 C++ 实现泛型编程的核心工具,解决 “逻辑完全一致、仅数据类型不同” 的代码冗余问题,不针对特定数据类型编写代码,一套逻辑适配 int、double、自定义类等任意类型,分为函数模板、类模板两大体系。默认模板参数:声明时可给 T 设置默认类型,如template,创建对象不指定类型时,默认使用 int。局限:类型推导存在约束,不同类型无法隐式转换匹配模板,复杂场景需显式指定类型函数名<类型>()。栈类模板:封装入栈、出栈、判空逻辑,T 可替换为数字、字符串、自定义实体,实现通用栈容器;

2502_92984602的博客 202

【C++】 C++11 知识点梳理(中)

本文系统讲解了C++可变参数模板(Variadic Template)及相关高级特性,主要内容包括: 可变参数模板基础:通过参数包Args...和解包args...实现任意数量参数接收,介绍了两种解包方式(递归拆解和C++17折叠表达式)。 emplace系列接口:详解emplace_back/emplace/emplace_front与push/insert的本质区别,强调就地构造的优势和初始化列表的限制。 移动语义规则:解析C++11默认移动构造/赋值的生成条件,说明拷贝/移动互抑制原则及析构函数对移动

专注后端与底层技术,分享实战干货与学习笔记,梦想进入字节跳动,步履不停,热爱不止。 2349

C++ 核心知识点梳理

本文系统梳理了C++核心知识点,主要包括:基础语法(数据类型、变量、流程控制、函数);面向对象特性(封装、继承、多态);以及C++特有扩展功能(引用、命名空间、智能指针等)。重点阐述了虚函数实现多态的机制、模板泛型编程的优势,以及智能指针如何自动管理内存。文章从基础到高级层层递进,既涵盖C++核心概念,又包含C++11等现代特性,为系统学习C++提供了清晰的知识框架。

ab123768的博客 990

C++知识点梳理:C++ templates

这3种参数是不同维度的,尤其是类型参数和template template参数,容易混淆,在实例化时需要区分模板参数和普通类型参数,如果定义为模板参数则只能提供模板名(不能用具体类型实例化,如vector,不是vector< int >)6)匿名参数,在模板参数列表中定义匿名参数,这些参数在模板定义中没有用到,仅用于静态分发(通过类型选择不同的模板),或者为了应用SFINAE规则(阻止生成不符合某些规则的模板)。只需要类名和后面的类型说明,和定义时不同,此时需要提供具体的类型。

yinminsumeng的博客 674

Flask模板注入梳理

Flask模板注入,SSTI,梳理

2301_79806187的博客 1037

C++模板进阶:非类型参数、特化与分离编译实战解析

C++模板作为泛型编程的核心机制,通过类型参数化实现了代码复用。其原理是在编译期根据具体类型生成特化代码,从而在保证类型安全的同时提升性能。模板的技术价值在于能够构建高度可复用且高效的泛型组件,广泛应用于标准库容器、算法以及高性能计算等场景。本文聚焦于模板的进阶特性,深入探讨非类型模板参数如何实现编译期常量配置,以及类模板特化如何为特定类型提供优化实现。同时,针对模板分离编译这一常见工程痛点,分析了其背后的编译链接模型,并提供了将定义置于头文件或使用显式实例化等解决方案,帮助开发者更好地组织模板代码,构建灵

weixin_30896825的博客 360
上一篇: 类模板知识点梳理
下一篇: 模板技巧性基础知识
zero_lee
博客等级 码龄21年 94粉丝 91原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值