C++标准模板(STL)- 类型支持 (类型修改,移除给定类型的一层指针,std::remove_pointer)

类型特性


类型特性定义一个编译时基于模板的结构,以查询或修改类型的属性。

试图特化定义于 <type_traits> 头文件的模板导致未定义行为,除了 std::common_type 可依照其所描述特化。

定义于<type_traits>头文件的模板可以用不完整类型实例化,除非另外有指定,尽管通常禁止以不完整类型实例化标准库模板。
 



类型修改


类型修改模板通过应用修改到模板参数,创建新类型定义。结果类型可以通过成员 typedef type 访问。

移除给定类型的一层指针

std::remove_pointer

template< class T >
struct remove_pointer;

(C++11 起)

提供成员 typedef type ,其为 T 所指向的类型,或若 T 不是指针,则 typeT 相同。

成员类型

名称定义
typeT 所指向的类型,或若 T 不是指针则为 T

辅助类型

template< class T >
using remove_pointer_t = typename remove_pointer<T>::type;

(C++14 起)

可能的实现

template< class T > struct remove_pointer                    {typedef T type;};
template< class T > struct remove_pointer<T*>                {typedef T type;};
template< class T > struct remove_pointer<T* const>          {typedef T type;};
template< class T > struct remove_pointer<T* volatile>       {typedef T type;};
template< class T > struct remove_pointer<T* const volatile> {typedef T type;};

 

调用示例

#include <iostream>
#include <type_traits>int main()
{std::cout << std::boolalpha;std::cout << "std::is_same<int, int>():                 "<< std::is_same<int, int>() << std::endl;std::cout << "std::is_same<int, int*>():                "<< std::is_same<int, int*>() << std::endl;std::cout << "std::is_same<int, int**>():               "<< std::is_same<int, int**>() << std::endl;std::cout << "----------------------------------------------------------------------" << std::endl;std::cout << "std::is_same<int, std::remove_pointer<int>::type>():      "<< std::is_same<int, std::remove_pointer<int>::type>() << std::endl;std::cout << "std::is_same<int, std::remove_pointer<int*>::type>():     "<< std::is_same<int, std::remove_pointer<int*>::type>() << std::endl;std::cout << "std::is_same<int, std::remove_pointer<int**>::type>():    "<< std::is_same<int, std::remove_pointer<int**>::type>() << std::endl;std::cout << "----------------------------------------------------------------------" << std::endl;std::cout << "std::is_same<int, std::remove_pointer<int* const>::type>():           "<< std::is_same<int, std::remove_pointer<int* const>::type>() << std::endl;std::cout << "std::is_same<int, std::remove_pointer<int* volatile>::type>():        "<< std::is_same<int, std::remove_pointer<int* volatile>::type>() << std::endl;std::cout << "std::is_same<int, std::remove_pointer<int* const volatile>::type>():  "<< std::is_same<int, std::remove_pointer<int* const volatile>::type>() << std::endl;return 0;
}

输出

std::is_same<int, int>():                 true
std::is_same<int, int*>():                false
std::is_same<int, int**>():               false
----------------------------------------------------------------------
std::is_same<int, std::remove_pointer<int>::type>():      true
std::is_same<int, std::remove_pointer<int*>::type>():     true
std::is_same<int, std::remove_pointer<int**>::type>():    false
----------------------------------------------------------------------
std::is_same<int, std::remove_pointer<int* const>::type>():           true
std::is_same<int, std::remove_pointer<int* volatile>::type>():        true
std::is_same<int, std::remove_pointer<int* const volatile>::type>():  true

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

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

相关文章

Android YUV存储方式

排名 性能&#xff1a;YUV444 > YUV422 > YUV420 > YUV411 YUV444&#xff1a;YUV444 提供最高质量的色彩准确性和图像细节&#xff0c;但需要更多的存储空间和传输带宽。适用于对图像质量要求很高的应用&#xff0c;如专业视频编辑或高端图像处理。YUV422&#xff1…

阻塞队列介绍(一)

1 基础概念 1.1 生产者消费者概念 生产者消费者是设计模式的一种。让生产者和消费者基于一个容器来解决强耦合问题。 生产者 消费者彼此之间不会直接通讯的&#xff0c;而是通过一个容器&#xff08;队列&#xff09;进行通讯。 所以生产者生产完数据后扔到容器中&#xff0c…

Qt QSpinBox与QDoubleSpinBox总结

QSpinBox 与 QDoubleSpinBox QSpinBox 和 QDoubleSpinBox是常用的数值输入和输出组件&#xff0c;我们将它们统称为 SpinBox。 从SpinBox读取的数据就是数值&#xff08;整数或浮点数&#xff09;&#xff0c;设置数值就可以直接显。QSpinBox 用于输入和输出整数&#xff0c;一…

使用Python的turtle库绘制随机生成的雪花

1.1引言 在这篇文章中&#xff0c;我们将使用Python的turtle库来绘制一个具有分支结构的雪花。该程序使用循环和随机颜色选择来绘制20个不同大小和颜色的雪花。turtle库是一个流行的绘图库&#xff0c;常用于创建图形用户界面和简单的动画。这个代码实现了一个有趣的应用&…

Elasticsearch:ES|QL 查询中的元数据字段及多值字段

在今天的文章里&#xff0c;我来介绍一下 ES|QL 里的元数据字段以及多值字段。我们可以利用这些元数据字段以及多值字段来针对我们的查询进行定制。 ES|QL 源数据字段 ES|QL 可以访问元数据字段。 目前支持的有&#xff1a; _index&#xff1a;文档所属的索引名称。 该字段的…

vue2项目从0搭建(三):配置环境变量及对应的webpack配置

前言 实际业务开发中,一个项目很可能会同时配置好几套环境。 比如:常规开发环境,开发测试环境,正式的测试环境,预发测试环境,客户甲的生产环境,客户乙的生产环境,通用生产环境,独立应用环境,微前端环境,大屏专用环境,移动端环境。 一女多嫁的实际业务场景,就需要我们进行多样…

tensorflow和pytorch都分别存在CPU和GPU版本

TensorFlow和PyTorch都有专门为CPU和GPU优化的版本。它们之间的代码在某些方面有一些不同&#xff0c;但通常可以相对容易地进行转换。以下是一些主要的区别和转换规则&#xff1a; 特性/操作TensorFlowPyTorch转换规则张量创建tf.constant()torch.tensor()创建张量时&#xf…

Android 提示框代码 java语言

在Android中&#xff0c;你可以使用 AlertDialog 类来创建提示框。以下是一个简单的Java代码示例&#xff0c;演示如何创建和显示一个基本的提示框&#xff1a; import android.app.AlertDialog; import android.content.Context; import android.content.DialogInterface; im…

AUTOSAR汽车电子嵌入式编程精讲300篇-基于机器学习的车载 CAN 网络入侵检测(续)

目录 3.2 车载 CAN 总线异常检测技术总结 基于机器学习算法的 CAN 总线入侵检测 4.1 相关知识概述

RocketMq架构和源码解析

NameServer&#xff1a;作为注册中心&#xff0c;提供路由注册、路由踢出、路由发现功能&#xff0c;舍弃强一致&#xff0c;保证高可用&#xff0c;集群中各个节点不会实时通讯&#xff0c;其中一个节点下线之后&#xff0c;会提供另外一个节点保证路由功能。 Broker&#xf…

vatee万腾的科技征途:Vatee独特探索的数字化力量

在数字化时代的浪潮中&#xff0c;Vatee万腾以其独特的科技征途成为引领者。公司在数字化领域的探索之路不仅是技术的创新&#xff0c;更是一种对未知的勇敢涉足&#xff0c;是对新时代的深刻洞察和积极实践。 Vatee万腾通过独特的探索&#xff0c;展示了在数字化征途上的创新力…

数据结构与算法之二叉树: LeetCode 101. 对称二叉树 (Typescript版)

对称二叉树 https://leetcode.cn/problems/symmetric-tree/ 描述 给你一个二叉树的根节点 root &#xff0c; 检查它是否轴对称。 示例 1 1/ | \2 | 2/ \ | / \3 4 | 4 3中间一条线是对称轴 输入&#xff1a;root [1,2,2,3,4,4,3] 输出&#xff1a;true示例 …

Matplotlib子图的创建_Python数据分析与可视化

Matplotlib子图的创建 plt.axes创建子图fig.add_axes()创建子图 plt.axes创建子图 前面已经介绍过plt.axes函数&#xff0c;这个函数默认配置是创建一个标准的坐标轴&#xff0c;填满整张图。 它还有一个可选的参数&#xff0c;由图形坐标系统的四个值构成。这四个值表示为坐…

Spine深入学习 —— 数据

atlas数据的处理 作用 图集&#xff0c;描述了spine使用的图片信息。 结构 page 页块 页块包含了页图像名称, 以及加载和渲染图像的相关信息。 page1.pngsize: 640, 480format: RGBA8888filter: Linear, Linearrepeat: nonepma: truename: 首行为该页中的图像名称. 图片位…

Python武器库开发-前端篇之CSS盒模型(三十一)

前端篇之CSS盒模型(三十一) CSS盒模型是指网页中的每个元素可以看做是一个矩形盒子&#xff0c;该盒子有四个主要部分组成&#xff1a;content、padding、border和margin。其中&#xff1a; content&#xff1a;指盒子中的内容区域&#xff0c;可以包含文本、图像、视频、其他…

RedLock底层源码分析

RedLock底层源码分析 一、Redlock红锁算法 https://redis.io/docs/manual/patterns/distributed-locks/官网说明 1、为什么要学习这个&#xff1f;怎么产生的&#xff1f; ​ 一个很直接的问题&#xff0c;当我使用redis锁的那台机器挂了&#xff0c;出现了单点故障了&#…

游戏开发引擎Cocos Creator和Unity如何对接广告-AdSet聚合广告平台

在游戏开发方面&#xff0c;游戏引擎的选择对开发过程和最终的产品质量有着重大的影响&#xff0c;Unity和Cocos是目前全球两大商用、通用交互内容开发工具&#xff0c;这两款引擎受到广泛关注&#xff0c;本文将从多个维度对两者进行比较&#xff0c;为开发者提供正确的选择建…

Rust10 Building a Multithreaded Web Server [End]

Rust学习笔记 Rust编程语言入门教程课程笔记 参考教材: The Rust Programming Language (by Steve Klabnik and Carol Nichols, with contributions from the Rust Community) Lecture 20: Final Project: Building a Multithreaded Web Server src/main.rs use std::fs; …

84基于matlab的数字图像处理

基于matlab的数字图像处理&#xff0c;数据可更换自己的&#xff0c;程序已调通&#xff0c;可直接运行。 84matlab数字图像处理图像增强 (xiaohongshu.com)https://www.xiaohongshu.com/explore/656219d80000000032034dea

python小数据分析小结及算法实践集锦

在缺乏大量历史数据的新兴技术和产业中&#xff0c;商业分析可能会面临一些挑战。然而&#xff0c;有一些技术和方法可以帮助分析者在数据不充分的情况下进行科学化商业分析&#xff0c;并为决策提供支持。 1. 当面对缺乏大量历史数据的新兴技术和产业时所采常用的技术和方法 …