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

C++标准模板(STL)- 类型支持 (类型属性,is_abstract,is_signed,is_unsigned)

类型特性


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

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

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

类型属性

继承自 std::integral_constant

成员常量

value

[静态]

T 为抽象类类型则为 true ,否则为 false
(公开静态成员常量)
成员函数

operator bool

转换对象为 bool ,返回 value
(公开成员函数)

operator()

(C++14)

返回 value
(公开成员函数)
成员类型
类型定义
value_typebool
typestd::integral_constant<bool, value>

检查类型是否为抽象类类型

std::is_abstract

template< class T >
struct is_abstract;

(C++11 起)

T 为抽象类(即声明或继承至少一个纯虚函数的非联合类类型),则提供等于 true 的成员常量 value 。对于其他类型, value 为 false 。

T 是非联合类类型,则 T 应为完整类型;否则行为未定义。

模板形参
T-要检查的类型
辅助变量模板

template< class T >
inline constexpr bool is_abstract_v = is_abstract<T>::value;

(C++17 起)
 调用示例
#include <iostream>
#include <type_traits>struct A
{int m;
};struct B
{virtual void foo();
};struct C
{virtual void foo() = 0;
};struct D : C {};int main()
{std::cout << std::boolalpha;std::cout << "std::is_abstract<int>::value:         "<< std::is_abstract<int>::value << std::endl;std::cout << "std::is_abstract<double>::value:      "<< std::is_abstract<double>::value << std::endl;std::cout << "std::is_abstract<std::string>::value: "<< std::is_abstract<std::string>::value << std::endl;std::cout << "std::is_abstract<A>::value:           "<< std::is_abstract<A>::value << std::endl;std::cout << "std::is_abstract<B>::value:           "<< std::is_abstract<B>::value << std::endl;std::cout << "std::is_abstract<C>::value:           "<< std::is_abstract<C>::value << std::endl;std::cout << "std::is_abstract<D>::value:           "<< std::is_abstract<D>::value << std::endl;return 0;
}
输出

检查类型是否为有符号算术类型

std::is_signed

template< class T >
struct is_signed;

(C++11 起)

T 是算术类型且 T(-1) < T(0) ,则提供等于 true 的成员常量 value :这对于浮点类型和有符号整数类型产生 true ,并对无符号整数类型和 bool 类型产生 false

对于任何其他类型, value 为 false 。

模板形参
T-要检查的类型
辅助变量模板

template< class T >
inline constexpr bool is_signed_v = is_signed<T>::value;

(C++17 起)
可能的实现
namespace detail {
template<typename T,bool = std::is_arithmetic<T>::value>
struct is_signed : std::integral_constant<bool, T(-1) < T(0)> {};template<typename T>
struct is_signed<T,false> : std::false_type {};
} // namespace detailtemplate<typename T>
struct is_signed : detail::is_signed<T>::type {};
调用示例
#include <iostream>
#include <type_traits>class A {};
enum B : int {};
enum class C : int {};int main()
{std::cout << std::boolalpha;std::cout << "std::is_signed<A>::value:             "<< std::is_signed<A>::value << std::endl;std::cout << "std::is_signed<std::string>::value:   "<< std::is_signed<std::string>::value << std::endl;std::cout << "std::is_signed<float>::value:         "<< std::is_signed<float>::value << std::endl;std::cout << "std::is_signed<signed int>::value:    "<< std::is_signed<signed int>::value << std::endl;std::cout << "std::is_signed<unsigned int>::value:  "<< std::is_signed<unsigned int>::value << std::endl;std::cout << "std::is_signed<B>::value:             "<< std::is_signed<B>::value << std::endl;std::cout << "std::is_signed<C>::value:             "<< std::is_signed<C>::value << std::endl;// 简短的形式:std::cout << "std::is_signed<signed int>():         "<< std::is_signed<signed int>() << std::endl;std::cout << "std::is_signed<unsigned int>():       "<< std::is_signed<unsigned int>() << std::endl;return 0;
}
输出

检查类型是否为无符号算术类型

std::is_unsigned

template< class T >
struct is_unsigned;

(C++11 起)

T 是算术类型且 T(0) < T(-1) ,则提供等于 true 的成员常量 value :这对无符号整数类型和 bool 类型产生 true 并对有符号整数类型和浮点类型产生 false

对于任何其他类型, value 为 false 。

模板形参
T-要检查的类型
辅助变量模板

template< class T >
inline constexpr bool is_unsigned_v = is_unsigned<T>::value;

(C++17 起)
 可能的实现
namespace detail {
template<typename T,bool = std::is_arithmetic<T>::value>
struct is_unsigned : std::integral_constant<bool, T(0) < T(-1)> {};template<typename T>
struct is_unsigned<T,false> : std::false_type {};
} // namespace detailtemplate<typename T>
struct is_unsigned : detail::is_unsigned<T>::type {};
调用示例
#include <iostream>
#include <type_traits>class A {};
enum B : int {};
enum class C : int {};int main()
{std::cout << std::boolalpha;std::cout << "std::is_unsigned<A>::value:             "<< std::is_unsigned<A>::value << std::endl;std::cout << "std::is_unsigned<std::string>::value:   "<< std::is_unsigned<std::string>::value << std::endl;std::cout << "std::is_unsigned<float>::value:         "<< std::is_unsigned<float>::value << std::endl;std::cout << "std::is_unsigned<signed int>::value:    "<< std::is_unsigned<signed int>::value << std::endl;std::cout << "std::is_unsigned<unsigned int>::value:  "<< std::is_unsigned<unsigned int>::value << std::endl;std::cout << "std::is_unsigned<B>::value:             "<< std::is_unsigned<B>::value << std::endl;std::cout << "std::is_unsigned<C>::value:             "<< std::is_unsigned<C>::value << std::endl;// 简短的形式:std::cout << "std::is_unsigned<signed int>():         "<< std::is_unsigned<signed int>() << std::endl;std::cout << "std::is_unsigned<unsigned int>():       "<< std::is_unsigned<unsigned int>() << std::endl;return 0;
}
输出

相关文章:

C++标准模板(STL)- 类型支持 (类型属性,is_abstract,is_signed,is_unsigned)

类型特性 类型特性定义一个编译时基于模板的结构&#xff0c;以查询或修改类型的属性。 试图特化定义于 <type_traits> 头文件的模板导致未定义行为&#xff0c;除了 std::common_type 可依照其所描述特化。 定义于<type_traits>头文件的模板可以用不完整类型实例…...

前端复制带上版权信息

前端复制带上版权信息 当用户复制内容时&#xff0c;自动添加版权信息。 HTML内容 <body><h1 inputmode"text">复制我</h1> </body>Js内容 document.addEventListener("copy", (event) > {event.preventDefault(); // 阻止…...

【ArcGIS微课1000例】0077:ArcGIS生成经纬网(shp格式)

使用ArcGIS制图的时候,可以很方便的生成经纬网、方里网及参考格网,但是在需要shp格式的经纬网,进一步在南方cass中使用经纬网的时候,就需要单独生成了。 如下图所示为全球大陆矢量数据,我们基于该数据来生成全球指定间距的经纬网数据。 在ArcGIS中,生成经纬网和方里网均…...

读程序员的制胜技笔记04_有用的反模式(下)

1. 重新发明轮子 1.1. 发明家的特质就是要用质疑的心态对待所有事物&#xff0c;你从未停下质疑&#xff0c;那你将不可避免地成为一个发明家 1.2. 并非所有的事情都有现成的轮子可以拿来用 1.3. 自己重新写一个新的API&#xff0c;最终调用你使用的库 1.3.1. 你的API应该是…...

linux驱动开发环境搭建

使用的是parallel 创建的ubuntu 16.04 ubuntu20.04虚拟机 源码准备 # 先查看本机版本 $ uname -r 5.15.0-86-generic# 搜索相关源码 $ sudo apt-cache search linux-source [sudo] password for showme: linux-source - Linux kernel source with Ubuntu patches linux-sourc…...

Qt利用VCPKG和CMake和OpenCV和Tesseract实现中英文OCR

文章目录 1. 开发平台2. 下载文件2.1 下载安装 OpenCV 库2.2 下载安装 Tesseract-OCR库2.3 下载训练好的语言包 3. CMakeLists.txt 内容4. Main.cpp4.1 中英文混合OCR 5. 在Qt Creator 中设置 CMake vcpkg5.1 在初始化配置文件里修改5.2 在构建配置里修改 说明&#xff1a;在Q…...

Day20力扣打卡

打卡记录 数组中两个数的最大异或值&#xff08;位运算&#xff09; 链接 二进制位上从高位向低位进行模拟&#xff0c;看数组中是否有满足此情况的数字。具体题解 class Solution { public:int findMaximumXOR(vector<int>& nums) {int mx *max_element(nums.be…...

设计模式之两阶段终止模式

文章目录 1. 简介 2. 常见思路3. 代码实战 1. 简介 两阶段终止模式&#xff08;Two-Phase Termination Pattern&#xff09;是一种软件设计模式&#xff0c;用于管理线程或进程的生命周期。它包括两个阶段&#xff1a;第一阶段是准备阶段&#xff0c;该阶段用于准备线程或进程…...

Dubbo捕获自定义异常

一.问题描述 Dubbo远程服务提供者抛出的自定义异常无法被消费方正常捕获&#xff0c;消费方捕获的自定义异常全部变成RuntimeException&#xff0c;使用起来很不方便。 二.原因分析 相关源码 /** Licensed to the Apache Software Foundation (ASF) under one or more* con…...

Leetcode刷题详解——求根节点到叶节点数字之和

1. 题目链接&#xff1a;129. 求根节点到叶节点数字之和 2. 题目描述&#xff1a; 给你一个二叉树的根节点 root &#xff0c;树中每个节点都存放有一个 0 到 9 之间的数字。 每条从根节点到叶节点的路径都代表一个数字&#xff1a; 例如&#xff0c;从根节点到叶节点的路径 1…...

emq集群配置nginx做负载均衡

emq集群配置nginx做负载均衡 创建 EMQ X 节点集群 emqx 集群搭建 例如: 节点IP 地址emqx192.168.1.17192.168.1.17emqx192.168.1.18192.168.1.18emqx192.168.1.19192.168.1.19 配置 /etc/nginx/nginx.conf mqtt集群搭建并使用nginx做负载均衡_亲测得结论 示例: vim /et…...

【JAVA学习笔记】60 - 坦克大战1.0-绘图坐标体系、事件处理机制

项目代码 https://github.com/yinhai1114/Java_Learning_Code/tree/main/IDEA_Chapter16/src/com/yinhai 绘图坐标体系 一、基本介绍 下图说明了Java坐标系。坐标原点位于左上角&#xff0c;以像素为单位。在Java坐标系中&#xff0c;第一个是x坐标&#xff0c;表示当前位置为…...

Android13 安装谷歌GMS导致打开蓝牙失败解决方法

Android13 安装谷歌GMS导致打开蓝牙失败解决方法 文章目录 Android13 安装谷歌GMS导致打开蓝牙失败解决方法一、前言二、解决方法1、简单的解决方法2、添加属性和日志解决 三、分析1、查看异常日志2、 查看蓝牙相关日志 四、总结1、Android13 安装谷歌GMS导致打开蓝牙失败具体原…...

独创改进 | RT-DETR 引入双向级联特征融合结构 RepBi-PAN | 附手绘结构图原图

本专栏内容均为博主独家全网首发,未经授权,任何形式的复制、转载、洗稿或传播行为均属违法侵权行为,一经发现将采取法律手段维护合法权益。我们对所有未经授权传播行为保留追究责任的权利。请尊重原创,支持创作者的努力,共同维护网络知识产权。 文章目录 YOLOv6贡献RepBi-…...

Ubuntu下安装vscode,并解决终端打不开vscode的问题

Visual Studio Code安装 1&#xff0c;使用 apt 安装 Visual Studio Code 在官方的微软 Apt 源仓库中可用。按照下面的步骤进行即可&#xff1a; 以 sudo 用户身份运行下面的命令&#xff0c;更新软件包索引&#xff0c;并且安装依赖软件&#xff1a; sudo apt update sud…...

Spring Boot Actuator 漏洞利用

文章目录 前言敏感信息泄露env 泄露配置信息trace 泄露用户请求信息mappings 泄露路由信息heapdump泄露堆栈信息 前言 spring对应两个版本&#xff0c;分别是Spring Boot 2.x和Spring Boot 1.x&#xff0c;因此后面漏洞利用的payload也会有所不同 敏感信息泄露 env 泄露配置信…...

acwing算法基础之数据结构--trie算法

目录 1 基础知识2 模板3 工程化 1 基础知识 trie树算法&#xff0c;也叫作字典树算法。 用处&#xff1a;用来高效存储和查找字符串集合的数据结构。 &#xff08;一&#xff09; 定义变量。 const int N 1e5 10; int son[N][26], cnt[N], idx; char str[N];&#xff08;二…...

ES from+size>10000报错

参考博客 from size > 10000就会报错 Result window is too large, from size must be less than or equal to: [10000] but was [10001]. See the scroll api for a more efficient way to request large data sets. This limit can be set by changing the [index.max_…...

(04)Mycat实现分库

1、如何选择分库表 #客户表 rows:20万 CREATE TABLE customer(id INT AUTO_INCREMENT,NAME VARCHAR(200),PRIMARY KEY(id) );#订单表 rows:600万 CREATE TABLE orders(id INT AUTO_INCREMENT,order_type INT,customer_id INT,amount DECIMAL(10,2),PRIMARY KEY(id) ); #…...

DeepSORT多目标跟踪——算法流程与源码解析

一、目标检测与目标追踪 1. 目标检测 在目标检测任务中&#xff0c;主要目标是识别图像或视频帧中存在的物体的位置和类别信息。这意味着目标检测算法需要定位物体的边界框&#xff08;Bounding Box&#xff09;并确定每个边界框内的物体属于哪个类别&#xff08;如人、汽车、…...

正点原子 STM32MP257 同构多核架构下的 ADC 电压采集与处理应用开发实战

在嵌入式系统中&#xff0c;ADC模拟电压的读取是常见的需求。如何高效、并发、且可控地完成数据采集与处理&#xff1f;本篇文章通过双线程分别绑定在 Linux 系统的不同 CPU 核心上&#xff0c;采集 /sys/bus/iio 接口的 ADC 原始值与缩放系数 scale&#xff0c;并在另一个核上…...

C# 图像清晰度“核武器”:8个PictureBox永不模糊的硬核实战技巧

在 Windows Forms 开发中&#xff0c;PictureBox 是我们展示视觉效果的窗口。然而&#xff0c;你是否曾因为图片在缩放或背景色不匹配时变得模糊、锯齿横生&#xff0c;甚至出现难看的“黑边”而感到抓狂&#xff1f;这不仅影响用户体验&#xff0c;更是对完美主义开发者的一种…...

实测:2026 年国内直连 AI 一站式平台,聊天 / 绘画 / 论文 / 视频全搞定,不用翻墙不花冤枉钱

最近 AI 圈真的太卷了。ChatGPT 5.4、Gemini 3.1、Claude Code 轮番上新&#xff0c;多模态、长文本、代码 Auto Mode 一个比一个强。但普通用户想用明白&#xff0c;真的太折腾。先说说我踩过的三大坑&#xff0c;句句大实话网络糟心到崩溃官网打不开、地区不可用、加载转圈、…...

Windows安装安卓APK的终极指南:APK Installer免费工具完整教程

Windows安装安卓APK的终极指南&#xff1a;APK Installer免费工具完整教程 【免费下载链接】APK-Installer An Android Application Installer for Windows 项目地址: https://gitcode.com/GitHub_Trending/ap/APK-Installer 还在为Windows电脑无法直接运行安卓应用而烦…...

在Windows上直接安装Android应用:APK安装器的三大优势与完整使用指南

在Windows上直接安装Android应用&#xff1a;APK安装器的三大优势与完整使用指南 【免费下载链接】APK-Installer An Android Application Installer for Windows 项目地址: https://gitcode.com/GitHub_Trending/ap/APK-Installer 你是否曾经希望在Windows电脑上直接运…...

暗黑2存档编辑器:免费开源工具助你轻松修改角色与装备

暗黑2存档编辑器&#xff1a;免费开源工具助你轻松修改角色与装备 【免费下载链接】d2s-editor 项目地址: https://gitcode.com/gh_mirrors/d2/d2s-editor 暗黑2存档编辑器是一款专门为《暗黑破坏神2》玩家设计的免费开源工具&#xff0c;让你能够轻松修改游戏存档&…...

Sora 2视频生成质量跃升47%的关键——Gaussian Splatting空间梯度重参数化技术(独家逆向工程报告)

更多请点击&#xff1a; https://intelliparadigm.com 第一章&#xff1a;Sora 2视频生成质量跃升47%的实证观测与技术归因 近期在多个基准测试中&#xff0c;Sora 2在UCF101-VideoQA、TVD和VidBench v2上的平均PSNR提升达47.2%&#xff0c;SSIM同步上升39.8%&#xff0c;关键…...

跨境社媒账号做不稳 很多时候不是内容不够好而是气质不够稳定

很多团队做跨境社媒时&#xff0c;最容易把注意力集中在“内容创意”上。 选题够不够新&#xff0c;切口够不够巧&#xff0c;视频开头能不能抓住人&#xff0c;标题会不会让人点开&#xff0c;这些当然都重要。但真正做久了之后会发现&#xff0c;一个账号能不能长期跑起来&am…...

Windows窗口置顶终极指南:AlwaysOnTop让你的重要窗口永不遮挡

Windows窗口置顶终极指南&#xff1a;AlwaysOnTop让你的重要窗口永不遮挡 【免费下载链接】AlwaysOnTop Make a Windows application always run on top 项目地址: https://gitcode.com/gh_mirrors/al/AlwaysOnTop 你是否厌倦了在多个窗口间来回切换&#xff0c;只为了查…...

为AI编程助手注入Go语言最佳实践:golang-skills技能包实战指南

1. 项目概述&#xff1a;为AI编程助手注入Go语言“肌肉记忆” 如果你和我一样&#xff0c;日常开发重度依赖像Cursor、Claude Code这类AI编程助手&#xff0c;那你肯定也遇到过类似的困扰&#xff1a;生成的Go代码虽然语法正确&#xff0c;但总感觉“味儿”不对。要么是错误处理…...