template之模板注意事项

c++模板实现不同类型的函数排序template与注意事项(一) 这里有C++STL——全面总结详细教程(附案例解析)(持续更新中) 利用函数模板封装一个排序的函数,可以对不同数据类型数组进行排序 。 排序算法:选择排序。 用char和int数组进行测试。 typename可以用class替代。 注意事项: 自动类型推导,必须推导出一致的数据类型T,才可以使用 模板必须要确定出T的数据类型,才可以使用 #include&lt... 阅读详情

前言

在分析STL之前, 我们需要先对template做一个回忆, 可能我总结的内容你都会了, 也可能你没有了印象了, 但是我还是希望你先浏览一下template的用法. 毕竟STL全部都涉及到了模板, 而template是学习STL的基础.

template使用

template的使用大大提高了代码的复用性, 抽象性.

  1. 类模板实例化时并不是每个成员函数都实例化了, 而是使用到了哪个成员函数, 那个成员函数才实例化.
/* ***** 1 *******/
template<class T>
class point
{
	public:
		point() : x(0), y(0) {}
		point(T x, T y) : x(x), y(y) {}
		T getX() const   { x = y;  return x; }	// 一般是无法通过编译的, x不允许被修改, 但是这里并没有报错
	private:
		T x;
		T y;
};
/* ***** 2 *******/
#define T int
class point
{
	public:
		point() : x(0), y(0) {}
		point(T x, T y) : x(x), y(y) {}
		T getX() const   { x = y;  return x; }
	private:
		T x; T y;
};

成员函数getX()应该无法通过编译, 就像实例2一样, 但是因为模板中没有使用到函数getX(), 也就没有实例化getX, 所以就没有出现编译报错. 实例2必须在编译的时候就要检查所有的成员即函数.

不是所有的模板都只能在运行时才会被实例化, 比如非类型模板参数就能在编译时期就已经实例化了, 这里主要说的是类模板, 不要混淆了.

  1. 可以把类模板和函数模板结合起来, 定义一个含有成员函数模板的类模板.
template<class T>
class point
{
	public:
		point() : x(0), y(0) {}
		point(T x, T y) : x(x), y(y) {}
		template<class U>	// 定义了另一个的模板参数类型
			void print(U x);
	private:
		T x;
		T y;
};

// 这里两个都要写出来
template<class T>
template<class U>
void point<T>::print(U x)
{
	std::cout << this->x + x;
}

int main()
{
	point<int> p;
	p.print(3.14);	// 因为是模板函数, 所以交给编译器自行推导

	exit(0);
}
  1. 类模板中可以声明static成员, 在类外定义的时候要增加template相关的关键词, 并且需要注意每个不同的模板实例都会有一个独有的static成员对象.
template<class T>
class tmp
{
	public:
		static T t;
};

template<class T>
T tmp<T>::t = 0;

int main()
{
	tmp<int> t1;
	tmp<int> t2;
	tmp<double> t3;
	t1.t = 1;
	std::cout << "t1.t = " << t1.t << endl;
	std::cout << "t2.t = " << t2.t << endl;
	cout << "t3.t = " << t3.t << endl;

	exit(0);
}

输出结果:

t1.t = 1
t2.t = 1
t3.t = 0

模板中的static是在每个不同的类型实例化一个, 相同类型的实例化对象共享同一个参数. 所以这里的t1, t2中哦t都是同一个实例化变量, 是共享的.

总结

本节只是简单讲了template在实例化时期和使用static, 嵌套模板的使用和注意, 下一节着重分析template的非类型参数.

ts-template:ts-template是TypeScript的模板 ts模板 ts-template是TypeScript的模板 立即下载

相关推荐

ARM学习 | 紧耦合存储器 (TCM)

TCM 是一种专用的片上存储器,直接与处理器核心耦合。确定性访问:由于不涉及缓存替换或一致性管理,访问延迟固定。高带宽:TCM 通常通过专用总线连接处理器核心,可以提供更高的数据吞吐率。用户管理:TCM 的分配和管理完全由开发者控制,不依赖硬件缓存策略。ARM 处理器中的 TCM 通常分为ITCM(指令紧耦合存储器)和DTCM(数据紧耦合存储器),分别用于存储指令和数据。TCM 是 ARM 处理器中不可忽视的重要特性,在实时系统和高性能嵌入式应用中具有重要地位。

qq_43167806的博客 3329

template<class T>

模板 使用中注意的问题 templateT>   (2011-10-03 17:38:57) T>" title="templateT>" style="margin:0px; padding:0px; border:0px; list-style:none; position:absolute; left:11px; top:4px">转载▼ 标签:   模板

qingyangliuyang的专栏 2293

Power BI应用案例:淘宝用户行为分析实战

一、案例背景 基于千万级的淘宝用户的使用记录,对淘宝用户的行为进行分析,具体指标包括:日PV、日UV、小时PV、小时UV、不同用户行为的PV、用户购买次数分布、用户购买频次分布、活跃用户消费情况等。通过本案例,可以基本看看Power BI都能分析达到怎么样的效果。 二、数据来源及结构 阿里天池官方发布的1万用户在2014年双十二期间的行为记录,数据量达1200万+。 数据下载地址:...

灰哥数据智能的专栏 1万+

template模板 使用注意事项

今天在创建多个不同表对应的model类。然后根据 表的标识确定UDP传输结构体的时候遇到很多问题。记录一下以防以后忘记。 template <typename T> struct Udpdata { char chheader; char chcommand; char chablity; char slength[2]; T t...

adddais的博客 580

PaddleOCR实战:如何在CentOS 8.5上搭建高性能OCR识别环境

本文详细介绍了在CentOS 8.5系统上搭建高性能PaddleOCR识别环境的完整指南。从系统环境准备、PaddlePaddle框架部署到PaddleOCR的定制化安装与性能优化,提供了针对生产环境的解决方案,包括GPU/CPU环境配置、内核参数调优及常见问题排查,帮助用户实现高效OCR识别。

weixin_29223603的博客 349

基于STM32的双串口同时工作的详细指南(含完整代码示例)

STM32是STMicroelectronics(意法半导体)公司推出的一系列基于ARM Cortex-M内核的微控制器,广泛应用于嵌入式系统中。STM32系列微控制器具有高性能、低功耗和丰富的外设接口,适用于各种应用场景。USART(Universal Synchronous/Asynchronous Receiver/Transmitter)和UART(Universal Asynchronous Receiver/Transmitter)是串口通信的两种方式。

m0_57781768的博客 3805

C++模版template

模版 模版相关知识对下学期的数据结构学习有重要作用,比如在链表、栈、队列的学习中频繁应用。下面是一段较为完整的链栈结构: ps. 不需要看懂这段代码,它只是为了说明模版在后续学习中的作用 #include <iostream> using namespace std; template<class T> //模版 class linkStack{ private: struct Node{ T data; //模版 Node* next;

cuc_pyx技术小站 1085

真双口RAM---Quartus与Vivado开发环境区别对比

2、写和写冲突:表示两个端口写使能同时有效且写地址相同,此时需要关断一个写,把两个写端口都需要更新的值处理到一个写端口上面,任何的DP RAM 都不支持写和写冲突。以上述直方图统计使用为例,博主在仿真过程中发现,vivado真双口RAM--B端口读写延迟2个clk;1、读和写冲突:如果读和写同时有效,且读和写是同一个地址时,发生RAM读写冲突,此时会把最新的写数据直接赋给读数据,称为写穿通到读。

weixin_54470733的博客 3582

【设计模式】使用unity实现模板模式(Template mode)

阅读《大话设计模式》后,自己根据unity的特性写的一个简单demo,如有不妥之处,欢迎评论纠正.... 首先贴上书中关于模板模式的代码: using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespa

赖张殷-Eagle 3139

EPICS电机支持(asynMotor)

EPICS电机支持(asynMotor)

yuyuyuliang00的博客 915

【8】mctp & pldm

异步会check seq,保证不丢包,虽然发一条req,不用等,但是不能发下一条req,等上条response回来后才能发下一条。TO(tag owner)=1是request,TO=0是response,但是异步通信response由0改为1。如下还有kcs,i3c,serial等。

持续更新ing... 1079

thymeleaf

thymeleaf TEXT MODEpublic class ThymeTemplate { private ThymeTemplate(){ } public static String merge(Map&lt;String,Object&gt; param, String template) { TemplateEngine templateEngine = getInst...

qq_42072311的博客 1173

MATLAB基础应用精讲-【数模应用】信用评分模型(附R语言和python代码实现)

信用评分模型是近年来兴起的一种为了保障银行和其他金融部门的金融安全而设立的一种关于人身金融权限的划定模型。该模型指根据客户的信用历史资料,利用一定的信用评分模型,得到不同等级的信用分数,根据客户的信用分数,来决定客户所可以持有的金额权限,从而保证还款等业务的安全性。而随着在现代社会和公司中,贷款,信用卡的作用日渐突出,信用评分模型的发展前景不可估量。信贷风险是指借款人因偿还贷款或履行合同承诺而破产而产生损失的可能性。传统上,它与贷款人无法偿还所欠利息和本金、影响现金流和增加装配成本所产生的风险有关。

qq_36130719的博客 364

Vue注意事项之|调试template模板

Vue注意事项之|调试template模版 大多数时候,在template上面写一些逻辑非常难调试,报错显示不清晰,都是直接看效果的,对于一些值来说,变得无法掌控,所以说在开发环境中,我都会在原型上挂一个全局的console.log方法进行调试 vue.prototype.$logs = window.console.log; // 使用 <template> <div>{{$logs(item.name)}}</div> </template>

楠辞琦咎 难上加楠 出琦止胜 922

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

vue 组件模板template定义时的注意事项

在创建组件的时候,需要定义模板对象,注意 : template 的 value值: 1、通常是一个字符串,该字符串中如果存在多层div嵌套,肯定存在换行,此时不应该使用单引号,而应该使用 键盘上左上角 数字1左边的那个键 · ; 2、该value的值(字符串)外层,必须有一个跟元素(例如div)包括着。 转载于:https://www.cnblogs.com/JAVA-STUDYE...

weixin_30736301的博客 1031

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

golang 模板template自定义函数用法示例以及注意事项

package main import ( "html/template" "net/http" "time" ) type User struct { Username, Password string RegTime time.Time } //这个函数的名字要大写,要不然模板中无法调用这个函数 func ShowTime(t time.Time, fo...

ezreal_pan的博客 5636

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

vue.js的template模板使用注意事项(vue2.x版本要求template模板内的元素必须在一个节点下)

问题: vue.js 定义一个template后,多行元素只显示第一行元素 解决方案 将多行元素放在一个div节点下就可以了,这是vue2.x版本后的要求 附代码 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Vue.js<...

weixin_42609712的博客 1052

zabbix模板:zabbix链接模板template和解除模板链接以及注意事项(73)

本文章依旧是针对zabbix的template模板知识再进行一些详解和强化,便于大家更好的使用zabbix自带模板实现需要功能。上边文章《zabbix模板:创建配置zabbix templates(75)》我们针对创建模板的步骤做了一个详细操作说明以及参数说明,其中就已经涉及到了链接与解除模板链接(link与unlink)。这篇文章除了说明怎么链接模板以外,还会特别讲到一些需要特别...

测试 1570

(四) kendo UI 模板控件template使用与注意事项

<script id="index" type="text/x-kendo-template"></script> ======================================================= <script id="index" type="text/x-kendo-template"> <span...

weixin_30685029的博客 249

小程序之模板使用

小程序之模板使用头部组件底部组件注意事项 头部组件 新建 template 目录文件,新建 header 模板文件,写入头部组件信息。 template 释义 模板。 //pages/template/header.wxml <text> 这里是头部组件 </text> 使用模板 //pages/first/first_demo.wxml <include sr...

江波淮叶的博客 431

C++模板(template)使用注意事项(error LNK2019: 无法解析的外部符号)

通常写模板类都是在类定义里面来实现,一个头文件(.h)包含所有定义和声明代码。今天调试程序中无意识的发现程序有内存泄漏,原来是CListCtrl在使用过程中,节点关联了数据指针,以前都是在控件窗体销毁事件里面进行数据释放处理,但是发现每次释放都得在销毁事件里面进行处理非常麻烦,有没有简单点的处理方式呢?我就想窗体销毁的时候,控件也会要销毁的,于是想在控件销毁里面顺带吧节点数据也给销毁,这样是不是就省事很多呢?这样做确实省事方便了很多。由于我不想关心节点所关联的数据类型,于是获取节点数据,返回值类型统一采用L

老狼的专栏 1001

Vue进阶(幺肆玖):template 标签

.vue 文件的基本结构如下: <template> ........ </template> <script> export default { name: "demo" } </script> <style scoped> .demo { font-size: 28px; } </style> 上面template标签是用来写 html

IT全栈 华强工作室 8019

小程序模板template使用介绍

template(模板):是可以在wxml中引用的代码,就是在wxml中引用公用的wxml类型的代码,它的作用类似于组件,因此这里简单的说明下template与Component (组件)的区别。 template(模板)与Component (组件)的区别: 1.template(模板):主要用于显示,简单的说主要是用于嵌入wxml的代码,模板中是可以拥有对应的样式以及逻辑,但是他并没有属于...

RJ0024的博客 452

PostgreSQL 基于模板创建数据库

PostgreSQL基于模板创建数据库     基本语句:create database mydb;     该命令会以template1库为模板生成一份副本作为新database,每一个新的database都会有一个属主,它就是执行此sql命令的角色。任何一个拥有createdb权限的角色都可以创建新的database。   其中,template1称为数据库模板,数...

博客颜色 1499

【Go】详解go语言中Template应用

除了这个简单的例子外,模板还支持更复杂的操作,如控制流结构(条件语句、循环等)、函数调用、嵌套模板等。Go语言中的模板应用非常广泛,它们用于生成动态内容、渲染HTML页面、生成文本文件等。通过使用模板,我们可以轻松地生成动态内容,并实现代码的复用性和可扩展性。还可以通过定义模板片段(partial)和模板继承等方式来提高模板的复用性。嵌套模板:Go语言中的模板支持模板的嵌套。通过定义和调用子模板,我们可以实现模板的复用。解析后的模板对象可以用于执行模板。在模板中,我们可以使用变量、控制结构和函数调用等。

Fanjufei的博客 847
上一篇: STL源码分析之配接器
下一篇: template之非类型模板参数
Function_18
博客等级 码龄10年 193粉丝 239原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值