当前位置: 首页 > news >正文

<<C++primer>>函数模板与类模板相关知识点整理

1.类型萃取的原理

类型萃取利用模板形参的推演方式使得类型去掉了引用性质:

//消除引用,保留原始特性  //类型萃取
/// </summary>
/// <param name="it"></param>
template<class _Ty>
struct my_remove_reference
{my_remove_reference(){int x = 10;_Ty Y = 10; }
};
template<class _Ty>
struct my_remove_reference<_Ty&>
{my_remove_reference(){int x = 10;_Ty Y = 10;}
};
template<class _Ty>
struct my_remove_reference<_Ty&&>
{my_remove_reference(){int x = 10;_Ty Y = 10;}};int main()
{my_remove_reference<int>i;my_remove_reference<int&>ilr;my_remove_reference<const int&>cilr;//调用struct my_remove_reference<_Ty&>my_remove_reference<int&&>rll; //调用struct my_remove_reference<_Ty&&>//student<int&> s1;
//	cout << s1.X << endl;
}
#endif

使用示例1:acs作为了a的引用。

/*类型转化示例,头文件type_traits*/
//1 转换成引用型别
int  main()
{int a = 10;int& b = a;add_lvalue_reference<int>::type acs  = a;acs = 100;cout << a;
}

使用示例2:rm的类型是int 而非int&

2 将引用转化为值类型
int main()
{int a = 10;int& ab = a;remove_reference<int&>::type rm = ab;std::cout<<typeid(rm).name();return 0;
}

2.在模板函数中,编译器无法确认返回类型,需要使用typename 告知其是类型

使用类的类型成员:为了知道模板函数中名字是否可以表示一个类型,用typename通知这是表示一个类型。

#if 0
/*使用类的类型成员:为了知道模板函数中名字是否可以表示一个类型,用typename通知这是表示一个类型*/
//此为返回一个容器成员类型的函数
template<class T>
typename T::value_type fun(const T& x)
{cout << "T" << typeid(T).name() << "\n";cout <<"typeid(T::value_type).name()"<< typeid(T::value_type).name() << "\n";if (!x.empty()){return x.back();}else {return typename T::value_type();}//std::cout << x << " ,   T::value_type :" << typeid(T).name() << "\n";//return typename T:: value_type();
}int main()
{int a = 10;vector<int> vec;auto res1 = fun<vector<int>>(vec);cout << typeid(res1).name() << "\n";cout << res1;return 0;
}
#endif

T::value_type  表示为容器元素的类型。

注意:auto res1 = fun<vector<int>>(vec); 也可写成auto res1 = fun(vec);

一个是显示指定参数类型,一个是隐式的自动匹配对应的模板函数。

3.使用decltype关键字返回你想要返回的类型 

在某些时候我们不想使用指定模板实参作为函数的返回值,而使用此关键字告诉编译器,返回类型和decltype括号中的类型相同。

示例:

template<class It>
auto fnc1(It beg, It end) ->decltype(*beg)
{return *beg;
}int main()
{string st = "111";vector<string>arr={ "111" };auto &res = fnc1(arr.begin(), arr.end());cout << typeid(res).name() << " ";cout << res;return 0;
}

移除引用型别

template<class It>
auto fnc(It beg, It end) ->//decltype(*beg)
typename remove_reference<decltype(*beg)> ::type
{cout<<typeid(*beg).name()<<"             ";//*beg = 100;return *beg;
}int main()
{string st = "111";vector<string>arr={ "111" };auto res = fnc(arr.begin(), arr.end());cout << typeid(res).name() << " ";cout << res;return 0;
}

注意,此函数调用时的返回类型要求是非引用类型,所以在函数中做了移除引用型别的处理。

4.引用折叠和理解move

5.模板参数与作用域

6.类模板的成员模板

7,显示实例化

相关文章:

<<C++primer>>函数模板与类模板相关知识点整理

1.类型萃取的原理 类型萃取利用模板形参的推演方式使得类型去掉了引用性质&#xff1a; //消除引用&#xff0c;保留原始特性 //类型萃取 /// </summary> /// <param name"it"></param> template<class _Ty> struct my_remove_reference …...

一小时学习 Git 笔记

一小时Git教程传送门 git 基础 1. 起始配置 # 配置自己的姓名 git config --global user.name "Your Name" # 配置自己的邮箱 git config --global user.email "emailexample.com" 注意1.命令之间有空格2.上面的两个命令只需要运行一次即可, 如果输入错…...

简单漂亮的登录页面

效果图 说明 开发环境&#xff1a;vue3&#xff0c;sass 代码 <template><div class"container"><div class"card-container"><div class"card-left"><span><h1>Dashboard</h1><p>Lorem ip…...

Leetcode-145 二叉树的后序遍历

递归 /*** Definition for a binary tree node.* public class TreeNode {* int val;* TreeNode left;* TreeNode right;* TreeNode() {}* TreeNode(int val) { this.val val; }* TreeNode(int val, TreeNode left, TreeNode right) {* this…...

详解JDBC

JDBC简介 概念: jdbc就是使用java语言操作关系型数据库的一套API 全称 : (Java DataBase Connectivity) Java数据库连接 本质: 官方(sun公司)定义的一套操作所有关系型数据库的规则&#xff0c;即接口&#xff1b; 各个数据库厂商实现这套接口&#xff0c;提供数据库驱动j…...

江门車馬炮汽车金融中心 11月11日开张

江门车马炮汽车金融中心于11月11日正式开张&#xff0c;这是江门市汽车金融服务平台&#xff0c;旨在为广大车主提供更加便捷、高效的汽车金融服务。 江门市作为广东省的一个经济发达城市&#xff0c;汽车保有量持续增长&#xff0c;但车主在购车、用车、养车等方面仍存在诸多不…...

Arthas设置参数以Json形式输出

进入arthas控制台后&#xff0c;先输入options json-format true命令&#xff0c;即可让结果、参数以json的方式输出&#xff0c;比如之后用watch命令查看参数&#xff0c;输出的形式就会是json了&#xff0c;这样的格式&#xff0c;就比较好复制出参数&#xff0c;在本地复现试…...

优雅关闭TCP的函数shutdown效果展示

《TCP关闭的两种方法概述》里边理论基础&#xff0c;下边是列出代码&#xff0c;并且进行实验。 服务端代码graceserver.c的内容如下&#xff1a; #include "lib/common.h"static int count;static void sig_int(int signo) {printf("\nreceived %d datagrams\…...

商品管理幻灯图片更换实现

<?xml version"1.0" encoding"UTF-8" ?> <!DOCTYPE mapperPUBLIC "-//mybatis.org//DTD Mapper 3.0//EN""http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <mapper namespace"com.java1234.mapper.ProductMappe…...

tomcat下载与使用教程

1. tomcat下载 官网&#xff1a;https://tomcat.apache.org/ 镜像地址&#xff1a;https://mirrors.huaweicloud.com/apache/tomcat/ 1、选择一个版本下载&#xff0c;官网下载速度缓慢&#xff0c;推荐镜像 2、对压缩包进行解压&#xff0c;无需进行安装&#xff0c;解压放…...

通过 Elasticsearch 和 Go 使用混合搜索进行地鼠狩猎

作者&#xff1a;CARLY RICHMOND&#xff0c;LAURENT SAINT-FLIX 就像动物和编程语言一样&#xff0c;搜索也经历了不同实践的演变&#xff0c;很难在其中做出选择。 在本系列的最后一篇博客中&#xff0c;Carly Richmond 和 Laurent Saint-Flix 将关键字搜索和向量搜索结合起…...

【LIUNX】配置缓存DNS服务

配置缓存DNS服务 A.安装bind bind-utils1.尝试修改named.conf配置文件2.测试nslookup B.修改named.conf配置文件1.配置文件2.再次测试 缓存DNS服务器&#xff1a;只提供域名解析结果的缓存功能&#xff0c;目的在于提高数据查询速度和效率&#xff0c;但是没有自己控制的区域地…...

Arduino驱动A01NYUB防水超声波传感器(超声波传感器)

目录 1、传感器特性 2、控制器和传感器连线图 3、通信协议 4、驱动程序 A01NYUB超声波测距传感器是一款通过发射和接收机械波来感应物体距离的电子传感器。该款产品具有监测距离远、范围广、防水等优点,且具有一定的穿透能力(烟雾、粉尘等)。该产品带有可拆卸式喇叭口,安…...

curl(八)时间和环境变量以及配置

一 时间 ① --connect-timeout 连接超时时间 ② -m | --max-time 数据最大传输时间 -m&#xff1a; 限制curl 完成时间(overall time limit)-m,--max-time <seconds> 整个交互完成的超时时间场景&#xff1a; 通过设置-m参数,可以避免请求时间过长而导致的超时错误…...

K8S知识点(十)

&#xff08;1&#xff09;Pod详解-启动命令 创建Pod&#xff0c;里面的两个容器都正常运行 &#xff08;2&#xff09;Pod详解-环境变量 &#xff08;3&#xff09;Pod详解-端口设置 &#xff08;4&#xff09;Pod详解-资源配额 修改&#xff1a;memory 不满足条件是不能正常…...

Netty实现通信框架

一、LengthFieldBasedFrameDecoder的参数解释 1、LengthFieldBasedFrameDecoder的构造方法参数 看下最多参数的构造方法 /*** Creates a new instance.** param byteOrder* the {link ByteOrder} of the length field* param maxFrameLength* the maximum len…...

【OpenCV实现图像:用OpenCV图像处理技巧之白平衡算法】

文章目录 概要加载样例图像统计数据分析White Patch Algorithm小结 概要 白平衡技术在摄影和图像处理中扮演着至关重要的角色。在不同的光照条件下&#xff0c;相机可能无法准确地捕捉到物体的真实颜色&#xff0c;导致图像呈现出暗淡、色调不自然或者褪色的效果。为了解决这个…...

文件包含 [ZJCTF 2019]NiZhuanSiWei1

打开题目 代码审计 if(isset($text)&&(file_get_contents($text,r)"welcome to the zjctf")){ 首先isset函数检查text参数是否存在且不为空 用file_get_contents函数读取text制定的文件内容并与welcome to the zjctf进行强比较 echo "<br><h…...

Java网络编程基础内容

IP地址 域名解析&#xff1a; 本机访问域名时&#xff0c;会从本地的DNS上解析数据&#xff08;每个电脑都有&#xff09;&#xff0c;如果有&#xff0c;获取其对应的IP&#xff0c;通过IP访问服务器。如果本地没有&#xff0c;会去网络提供商的DNS找域名对应的IP&#xff0…...

DevChat:开发者专属的基于IDE插件化编程协助工具

DevChat&#xff1a;开发者专属的基于IDE插件化编程协助工具 一、DevChat 的介绍1.1 DevChat 简介1.2 DevChat 优势 二、DevChat 在 VSCode 上的使用2.1 安装 DevChat2.2 注册 DevChat2.3 使用 DevChat 三、DevChat 的实战四、总结 一、DevChat 的介绍 在AI浪潮的席卷下&#x…...

如何用SwiftUI实现macOS自动化点击:技术原理与实战指南

如何用SwiftUI实现macOS自动化点击&#xff1a;技术原理与实战指南 【免费下载链接】macos-auto-clicker A simple auto clicker for macOS Big Sur, Monterey, Ventura, Sonoma and Sequoia. 项目地址: https://gitcode.com/gh_mirrors/ma/macos-auto-clicker macOS自动…...

4步攻克Dlib库Windows安装难题:从环境诊断到功能验证的完整指南

4步攻克Dlib库Windows安装难题&#xff1a;从环境诊断到功能验证的完整指南 【免费下载链接】Dlib_Windows_Python3.x Dlib compiled binaries (.whl) for Python 3.7-3.14 and Windows x64 项目地址: https://gitcode.com/gh_mirrors/dl/Dlib_Windows_Python3.x 一、环…...

9个非技术岗也能胜任的AI岗位,小白程序员看过来,建议收藏![特殊字符]

9个非技术岗也能胜任的AI岗位&#xff0c;小白程序员看过来&#xff0c;建议收藏&#xff01;&#x1f525; 本文介绍了9个适合非技术背景人士的AI相关岗位&#xff0c;包括AI产品运营、大模型产品助理、AI客服训练师等&#xff0c;涵盖了岗位职责、薪资水平、招聘方及入门建议…...

谷歌Gemma 4模型深度解析:开源王者来袭,单卡可跑,性能碾压20倍参数量对手

2026年4月2日&#xff0c;谷歌DeepMind悄然发布新一代开源大模型Gemma 4系列&#xff0c;瞬间引爆AI开源社区。作为谷歌迄今为止最智能的开放模型&#xff0c;Gemma 4不仅带来了覆盖手机到数据中心的全场景型号&#xff0c;更以Apache 2.0开源协议彻底放开限制&#xff0c;凭借…...

GSS引擎的未来发展:约束式布局在Web开发中的趋势

GSS引擎的未来发展&#xff1a;约束式布局在Web开发中的趋势 【免费下载链接】engine GSS engine 项目地址: https://gitcode.com/gh_mirrors/engi/engine GSS&#xff08;Grid Style Sheet&#xff09;引擎作为约束式布局在Web开发中的革命性解决方案&#xff0c;正在重…...

dl-librescore:开源乐谱下载解决方案,打破MuseScore资源获取限制

dl-librescore&#xff1a;开源乐谱下载解决方案&#xff0c;打破MuseScore资源获取限制 【免费下载链接】dl-librescore Download sheet music 项目地址: https://gitcode.com/gh_mirrors/dl/dl-librescore 在音乐创作、教学和学习过程中&#xff0c;获取高质量乐谱资源…...

终极指南:如何使用UABEA高效处理Unity Asset Bundle资源

终极指南&#xff1a;如何使用UABEA高效处理Unity Asset Bundle资源 【免费下载链接】UABEA c# uabe for newer versions of unity 项目地址: https://gitcode.com/gh_mirrors/ua/UABEA UABEA是一款专业的C#资产包提取工具&#xff0c;专门针对新版本Unity引擎的Asset B…...

3大核心价值助力自媒体高效采集:抖音无水印下载工具全解析

3大核心价值助力自媒体高效采集&#xff1a;抖音无水印下载工具全解析 【免费下载链接】douyin-downloader A practical Douyin downloader for both single-item and profile batch downloads, with progress display, retries, SQLite deduplication, and browser fallback s…...

零代码体验LingBot-Depth:在线Demo快速生成3D深度效果图

零代码体验LingBot-Depth&#xff1a;在线Demo快速生成3D深度效果图 1. 引言&#xff1a;当普通照片“看”懂了三维世界 你有没有想过&#xff0c;一张普通的手机照片&#xff0c;除了记录下那一刻的色彩和构图&#xff0c;还能“记住”当时场景里每个物体离你有多远&#xf…...

别再手动算面积了!用ArcGIS 10.6的‘汇总统计’功能,5分钟搞定土地利用数据分析

5分钟掌握ArcGIS 10.6汇总统计&#xff1a;土地利用分析效率提升实战 在城乡规划、生态保护等领域的日常工作中&#xff0c;我们经常需要处理各类空间数据。以某市自然资源局为例&#xff0c;工作人员每月需要统计各行政区不同土地利用类型的面积分布情况。传统做法是将属性表导…...