[C++] 模板编程-01函数模板

一 模板与宏

  • 宏在预处理阶段处理,模板在编译阶段处理
  • 宏不会检查类型,只是文本替换,而模板会进行类型检查
  • 模板只有实例化后才会产生代码

二 函数模板

  • 将相同功能的函数模板化

2.1 定义 

template <class或者typename T>

返回类型 函数名(形参表)

{

    函数定义体

}

// 定义一个函数模板
template<typename T>
T sum(T a, T b)
{return a + b;
}

2.1 不同类型的模板参数

  • 我们不但可以使用不同类型的模板参数,还可以将模板参数作为函数的返回值
template<typename T1,typename T2,typename T3>
void sum(T1 a, T2 b,T3 &c)
{c = a + b;
}

2.3 成员函数模板

class Product
{
public:template<typename T>void setProduct(const T& t){qDebug()<<t;}
};Product product;product.setProduct<const char*>("生产者");

三 模板函数

  • 强调的是函数:是由一个函数模板生成而来的函数

3.1 生成模板函数

  • 我直接使用qt的数据类型也是可以成功运行处预期的结果的
    // 模板函数// intint iSum   = sum<int>(1,999);// floatfloat fSum = sum<float>(1.0021f,999.123f);// QStringQString sSum = sum<QString>("你好","世界");qDebug()<<iSum<<fSum;

四 命名隔离

  • 如果在外部定义了一个与模板类型相同的命名,模板并不会受到影响,也就是说模板内部是相对隔离的。
typedef QString T;
template<typename T>
T sum(T a, T b)
{return a + b;
}
  • 当然你不能把这个重命名放在模板里面
template<typename T>
T sum(T a, T b)
{typedef QString T;return a + b;
}

五 问题

5.1 同一类型的模板参数不能多次定义

template<class T,class T>

5.2 有一个以上的模板参数时,每个都必须指定类型

template<class T,T2>  // 这是错误的

// 必须这样写

temlpate<class T,class T2>

5.3 inline/constexpr不能写在模板声明处

inline template<classT> // 错误格式

// 正确格式应该是卸载函数前

template<class T>

inline void sum(T a, T b);

5.4 extern声明如果调用了就必须实现

  • 如果定义了一个这种extern声明了一个函数,并且程序中会调用这个模板来生成模板函数,那么这个模板就必须完成定义
  • 相反如果没有调用,其实是可以不用定义的
  • 同样的inline和constexpr也一样

template<typename T>
extern void sum(T a);

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/49218.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

减轻幻觉新SOTA,7B模型自迭代训练效果超越GPT-4,上海AI lab发布

LLMs在回答各种复杂问题时&#xff0c;有时会“胡言乱语”&#xff0c;产生所谓的幻觉。解决这一问题的初始步骤就是创建高质量幻觉数据集训练模型以帮助检测、缓解幻觉。 但现有的幻觉标注数据集&#xff0c;因为领域窄、数量少&#xff0c;加上制作成本高、标注人员水平不一…

介绍一下TCP/IP 模型和 OSI 模型的区别

OSI 模型是由国际标准化组织制定的一个用于计算机或通信系统间互联的标准体系&#xff0c;一共有七层&#xff0c;由上而下分别为应用层&#xff0c;表示层&#xff0c;会话层&#xff0c;传输层&#xff0c;网络层&#xff0c;数据链路层和物理层&#xff0c;虽然 OSI 模型理论…

微信公众平台无限回调系统 /user/ajax.php SQL注入漏洞复现

0x01 产品简介 微信公众平台无限回调系统是一种旨在提升企业客户服务体验和运营效率的工具。该系统通过一系列智能化和自动化的功能,帮助企业与用户之间建立更加便捷、高效的沟通桥梁。 0x02 漏洞概述 微信公众平台无限回调系统 /user/ajax.php 接口存在SQL注入漏洞,未经身…

k8s多集群管理工具kubecm

文章目录 一、概述二、安装1、官网链接2、各平台安装2.1、MacOS2.2、Linux2.3、Windows 三、实例1、验证2、配置kubecm自动补全&#xff08;选做&#xff09;2.1、Bash2.2、Zsh2.3、fish2.4、PowerShell 3、创建存放kubeconfig文件的目录4、添加到 $HOME/.kube/config4.1、kube…

win10系统通过docker部署pytorch的cpu环境_中文地址命名实体识别案例

命名实体有关文章参考这篇文章 中文地址命名实体识别训练和预测 其它docker部署类似文章参考 分布式爬虫管理平台gerapy通过docker部署scrapyd来添加主机(四) 背景 通过win10系统通过docker来部署,可以方便的在其它没有python环境的电脑上部署python项目,下面所有操作基…

【网络安全】通过导入功能将权限提升至管理员

未经许可&#xff0c;不得转载。 文章目录 正文 正文 一款学习型 Web 应用&#xff0c;具有多个角色&#xff0c;其中两个相关角色是admin和student。 管理员拥有完全访问权限&#xff0c;而学生拥有有限的访问权限。管理面板中的一项功能允许管理员通过 CSV 方便地导入用户&…

EXCEL自动公式计算始终为0

如果你的数据单元格的左上角存在绿色的三角小箭头&#xff0c;那么就会造成这种问题&#xff1a; 你的数字是以文本形式存入的单元格 解决办法&#xff1a; 选中数据列&#xff0c;数据->分列 直接选择完成 此时就可以进行公式计算了

嵌入式人工智能(26-基于树莓派4B的声音传感器)

发声体产生的振动在空气或其他物质中的传播叫作声波。声波可以借助各种介质向四面八方传播,根据频率的不同&#xff0c;可分为普通的声波(人耳能听到的&#xff0c;频率为20~20000Hz)和超声波(人耳不能听到,频率大于20000Hz)。声波传感器可以检测环境中的声波信号&#xff0c;根…

ASPICE框架下的汽车软件过程改进关键原则-亚远景

ASPICE&#xff08;Automotive Software Process Improvement and Capacity Determination&#xff0c;汽车软件过程改进及能力评定&#xff09;的过程改进原则主要包括以下几个方面&#xff1a; 目标驱动原则&#xff1a; 流程的优化方案应从流程的目标出发&#xff0c;而不是…

Linux进程——环境变量之二

文章目录 环境变量查看环境变量获取环境变量main()的第三个参数本地变量全局环境变量内建命令与常规命令 环境变量 查看环境变量 在上一篇文章中我们只说了查看某个环境变量的值&#xff0c;那么如何查看所有的环境变量呢 使用指令env即可 例如 这里我们也不需要全部记住&a…

python学习之面向对象编程1--类(Class)

引言&#xff1a; Python 是一种广泛使用的高级编程语言&#xff0c;它支持多种编程范式&#xff0c;包括面向对象编程&#xff08;OOP&#xff09;。面向对象编程是一种编程范式&#xff0c;它使用“对象”来设计应用程序和计算机程序。在面向对象编程中&#xff0c;对象包含数…

linux系统常用命令(个人使用)

etc里面放的是linux里面简单的配置文件 pwd显示当前所处路径的绝对路径 touch 创建空的文件 cat 查看文件内容把文件内容打印到控制台上 输入一个命令没啥提示多半是成功了 >就是重定向 echo 重定向只能写一些简单的字符串内容 vim用户编辑器 打开文件 vim 文件名 编辑文件…

WPF MVVM框架:CommunityToolkit.Mvvm包使用介绍

最近在需要使用MVVM框架的时候才发现MvvmLight作者宣布停止更新了&#xff0c;有点可惜。 原作者推荐使用CommunityToolkit.Mvvm包&#xff0c;所以这里做一个CommunityToolkit.Mvvm包使用的全面的总结。 开发环境&#xff1a; Visual Studio 2019Windows 10 1903CommunityTo…

海山数据库(He3DB)性能优化方案解析

前端优化是一个永恒的话题&#xff0c;每个前端开发者都希望自己的页面能够快速加载&#xff0c;给用户良好的体验。但往往事与愿违。因此&#xff0c;本文从编码优化、构建优化、部署优化三方面入手进行web页面性能优化。 1. 编码优化 1.1. Css优化 1.1.1. 合理使用css选择…

python中接口自动化中jsonpath详解

python在在进行接口关联的时候经常会用到参数提取&#xff0c;对于json格式的提取这个时候jsonpath提取器就很常用&#xff0c;这边主要分享一下jsonpath的详细用法 1.jsonpath的语法 &#xff08;1&#xff09;特点&#xff1a;只能提取json格式的数据&#xff0c;提取后的数…

vue 实战 区域内小组件元素拖拽 示例

<template><div><el-button type"primary" click"showDialog true">快捷布局</el-button><el-dialog title"快捷布局配置" :visible.sync"showDialog"><el-row :gutter"20"><el-co…

深度学习每周学习总结N5:调用Gensim库训练Word2Vec模型

目录 0. 总结&#xff1a;1. 关于nn.Embedding(), nn.EmbeddingBag(), 和 word2vecnn.Embedding()nn.EmbeddingBag()Word2Vec联系与区别 2. 调用Gensim库训练Word2Vec模型准备工作对原始语料分词训练模型模型应用计算词汇相似度找出不匹配的词汇计算词汇的词频 提问&#xff1a…

全方位数据管理:一站式爬虫服务解决方案

摘要 面对互联网信息爆炸的时代&#xff0c;如何高效地收集、整理并分析海量数据&#xff0c;成为企业与开发者面临的一大挑战。本文将深入探讨一站式爬虫服务解决方案&#xff0c;揭示如何通过全方位数据管理策略&#xff0c;助力企业轻松驾驭大数据海洋&#xff0c;实现数据…

专业视频拍摄与编辑SDK,定制专属视频解决方案

无论是社交媒体营销、产品展示、教育培训还是直播电商&#xff0c;高质量的视频内容都是吸引眼球、传递信息的关键。美摄科技&#xff0c;作为视频编辑处理领域的佼佼者&#xff0c;以其强大的视频拍摄与编辑SDK&#xff0c;为企业开启了视觉创意的新篇章。 【专业级功能&…

web3d值得学习并长期发展,性价比高吗?

在数字化浪潮日益汹涌的今天&#xff0c;Web3D技术以其独特的魅力和广泛的应用前景&#xff0c;逐渐成为技术领域的焦点。对于许多热衷于技术探索和创新的人来说&#xff0c;学习并长期发展Web3D技术无疑是一个值得考虑的选择。那么&#xff0c;Web3D技术的学习和发展究竟是否性…