C++标准模板(STL)- 类型支持 (类型特性,is_member_object_pointer,is_member_function_pointer)

news2024/11/28 0:35:39

类型特性


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

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

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

类型属性


定义于头文件 <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_member_object_pointer

template< class T >
struct is_member_object_pointer;

(C++11 起)

检查 T 是否为非静态成员对象指针。若 T 是非静态成员对象指针类型,则提供等于 true 的成员常量 value 。否则, value 等于 false 。

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

template< class T >
inline constexpr bool is_member_object_pointer_v = is_member_object_pointer<T>::value;

(C++17 起)
可能的实现
template<class T>
struct is_member_object_pointer : 
std::integral_constant< bool,
std::is_member_pointer<T>::value &&
!std::is_member_function_pointer<T>::value> {};
调用示例
#include <iostream>
#include <type_traits>

int main()
{
    class cls {};
    std::cout << "int(cls::*):      "
              << (std::is_member_object_pointer<int(cls::*)>::value
                  ? "T is member object pointer"
                  : "T is not a member object pointer") << std::endl;
    std::cout << "int(cls::*)():    "
              << (std::is_member_object_pointer<int(cls::*)()>::value
                  ? "T is member object pointer"
                  : "T is not a member object pointer") << std::endl;

    return 0;
}
输出

检查类型是否为指向非静态成员函数的指针

std::is_member_function_pointer

template< class T >
struct is_member_function_pointer;

(C++11 起)

检查 T 是否为非静态成员函数指针。若 T 为非静态成员函数指针类型,则提供等于 true 的成员常量 value 。否则, value 等于 false 。

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

template< class T >
inline constexpr bool is_member_function_pointer_v = is_member_function_pointer<T>::value;

(C++17 起)
可能的实现
template< class T >
struct is_member_function_pointer_helper : std::false_type {};
 
template< class T, class U>
struct is_member_function_pointer_helper<T U::*> : std::is_function<T> {};
 
template< class T >
struct is_member_function_pointer : 
is_member_function_pointer_helper< std::remove_cv_t<T> > {};
调用示例
#include <type_traits>
#include <iostream>

class A
{
public:
    void member() { }
};

int main()
{
    // 若 A::member 是数据成员而非函数,则在编译时失败
    static_assert(std::is_member_function_pointer<decltype(&A::member)>::value,
                  "A::member is not a member function.");
    return 0;
}

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

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

相关文章

IOC课程整理-11 Spring 资源管理

1. 引入动机 2. Java 标准资源管理 3. Spring 资源接口 4. Spring 内建 Resource 实现 5. Spring Resource 接口扩展 6. Spring 资源加载器 7. Spring 通配路径资源加载器 8. Spring 通配路径资源扩展 9. 依赖注入Spring Resource 10. 依赖注入 ResourceLoader 11. 面试题精选 …

前端技术知识(含八股)总结 - 持续更新中

前端技术知识&#xff08;含八股&#xff09;总结 - 持续更新中 参考文献1.HTML和CSS1.1 语义化标签1.2 CSS 选择器及优先级 / position 定位 / box-sizing 属性 / transition / 继承属性&#xff08;如字体文字类的属性大部分有继承&#xff09;/ 行内元素和块级元素 / html的…

中科软:聚焦垂直行业,更聚焦“模型即服务”

【科技明说 &#xff5c; 重磅专题】 中科软的特长是什么&#xff0c;熟悉的业内朋友不难回答。但是&#xff0c;在AIGC时代&#xff0c;中科软的特长又是什么&#xff1f; 发挥自身优势与特长&#xff0c;与业界友商在AIGC发展之路上热情PK&#xff0c;这对于中科软的务实传…

【面试题08.06.汉诺塔问题】

目录 一、题目描述二、算法原理三、代码实现 一、题目描述 二、算法原理 三、代码实现 class Solution { public:void hanota(vector<int>& A, vector<int>& B, vector<int>& C) {int nA.size();_hanota(n,A,B,C);}void _hanota(int n,vector&l…

闭包通俗解释,Demo(Go Java Python)

闭包的概念 想象一下&#xff0c;你有一个包裹着变量的函数&#xff0c;就像是一个封闭的包裹。这个包裹里有一个变量&#xff0c;而这个函数&#xff08;或包裹&#xff09;本身就是一个完整的单元。当你把这个函数传递给其他地方&#xff0c;就像是把这个包裹传递出去。 这…

【教3妹学编辑-算法题】H 指数

2哥 :3妹&#xff0c;早上好啊&#xff0c; 吃过早餐了没呢&#xff1f; 3妹&#xff1a;2哥早&#xff0c; 我早餐已经吃过了&#xff0c; 吃了油条、豆浆、牛肉饼、八宝粥…… 嗝…… 2哥&#xff1a;吃这么多&#xff0c; 看你都打嗝了&#xff0c;吃饭喝足&#xff0c;开始…

分享54个ASP.NET源码总有一个是你想要的

分享54个ASP.NET源码总有一个是你想要的 链接&#xff1a;https://pan.baidu.com/s/1khPzxtOFP0wUHpg7TBDitg?pwd8888 提取码&#xff1a;8888 项目名称 (ASP.Net)基于三层架构的企业信息管理系统 asp .net mvc编写的房产管理系统 asp.net core mvc 病人管理后台 asp.ne…

2023年【汽车驾驶员(中级)】最新解析及汽车驾驶员(中级)复审考试

题库来源&#xff1a;安全生产模拟考试一点通公众号小程序 汽车驾驶员&#xff08;中级&#xff09;最新解析考前必练&#xff01;安全生产模拟考试一点通每个月更新汽车驾驶员&#xff08;中级&#xff09;复审考试题目及答案&#xff01;多做几遍&#xff0c;其实通过汽车驾…

升级降级苹果手机iOS系统工具iMazing2024

像任何计算设备一样&#xff0c;iPhones和iPads偶尔也会出现问题。有时iOS会崩溃&#xff0c;你需要重新安装它&#xff0c;以确保你可以继续使用设备&#xff0c;而不会丢失任何数据。有时你会看到一个黑屏&#xff0c;你不能用你的设备做任何事情。有时iPhone或iPad会陷入循环…

安信可小安派AiPi 代码下载

安信可小安派AiPi 代码下载笔记记录 AiPi 代码下载&#xff08;直接使用命令行操作&#xff0c;仅需要Type-C接口线即可&#xff09; 在完成环境搭建&#xff0c;和代码编写前提下&#xff0c;使用Type-C接口线下载代码&#xff0c;当然可以自己使用usb-ttl串口线下载程序&am…

TextureView和SurfaceView

1、Surface Surface对应了一块屏幕的缓冲区&#xff0c;每一个window对应一个Surface&#xff0c;任何View都是画在Surface上的&#xff0c;传统的View共享一块屏幕缓冲区&#xff0c;所有的绘制都必须在UI线程上进行。 2、SurfaceView 顾名思义就是Surface的View&#xff0c;…

【机器学习】项目数据处理部分

文章目录 前言项目理解数据探索特征工程总结 前言 本文参考《阿里云天池大赛赛题解析》&#xff0c;拿到一个项目或者赛题&#xff0c;使用机器学习来进行预测分类&#xff0c;需要以下七个步骤&#xff1a; 项目&#xff08;赛题&#xff09;理解数据探索特征工程模型训练模…

归并排序——

之前我们学习过把两个有序数组合并再一起后任然有序&#xff0c;就叫归并&#xff1b; 那么&#xff0c;排序是否也可以把一个要排序的数组分割成两个有序的数组&#xff0c;然后归并&#xff0c;之后再拷贝回原数组&#xff0c;就实现了排序 但是怎么才能控制分割成的数组是有…

MediaPlayer

1、概念 MediaPlayer是Android原生的多媒体播放器&#xff0c;可以用它来实现本地或者在线音视频的播放。 2、MediaPlayer的状态 下面的图是官方给出的状态转换图&#xff0c;也可易理解为MediaPlayer的生命周期。 椭圆形&#xff1a;表示MediaPlayer的状态&#xff1b;弧形…

视频下载软件 Downie4 mac中文介绍

Downie mac是一款Mac平台上非常实用的视频下载工具。它支持下载各种视频网站上的视频&#xff0c;并且具有快速、稳定、易于使用的特点。 Downie支持下载各种视频网站上的视频&#xff0c;包括YouTube、Vimeo、Netflix、Hulu、Amazon等等。它具有快速、稳定的下载速度&#xff…

【PWN · heap | Off-By-One】Asis CTF 2016 b00ks

萌新进度太慢了&#xff0c;才真正开始heap&#xff0c;还是从简单的Off-By-One开始吧 前言 步入堆的学习。堆的知识复杂而多&#xff0c;于是想着由wiki从简单部分逐个啃。 b00ks是经典的堆上off-by-one漏洞题目。刚开始看很懵&#xff08;因为确实连堆的管理机制都没有完全…

为什么多线程会带来性能问题?

为什么多线程会带来性能问题&#xff1f; 什么是性能问题 在上一篇中&#xff0c;我们已经学习了多线程带来的线程安全问题&#xff0c;但对于多线程而言&#xff0c;它不仅可能会带来线程安全问题&#xff0c;还有可能会带来性能问题&#xff0c;也许你会奇怪&#xff0c;我…

C生万物 | 从浅入深理解指针【第二部分】

C生万物 | 从浅入深理解指针【第二部分】 前言&#xff1a; 如果没有看过第一部分的话&#xff0c;推荐先看第一部分&#xff0c;然后再来看第二部分~~ 文章目录 C生万物 | 从浅入深理解指针【第二部分】前言&#xff1a;1. 数组名的理解2. 使用指针访问数组3. 一维数组传参的…

很多年前负责的BPO业务

业务最多的时候大约有120人左右&#xff0c;后来这个部门就去掉了。只留了4个领导。原因是俺开发了一些系统&#xff0c;替代了这个部门的人工。 当时的一些文档 &#xff0c;现在还保留着。 数据安全最重要&#xff1a;严格控制网络安全漏洞&#xff0c;防止业务数据泄密。为…

4.3 视图机制

4.3 视图机制的笔记整理&#xff1a; 视图的作用&#xff1a; 数据隔离&#xff1a;为不同的用户提供不同的数据视图&#xff0c;从而限制数据对象的可见范围。安全保护&#xff1a;通过视图隐藏敏感或保密的数据&#xff0c;使无权存取的用户无法直接看到这些数据&#xff0c;…