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

C++新经典模板与泛型编程:用成员函数重载实现is_base_of

用成员函数重载实现is_base_of

std::is_base_of是一个C++ 11标准中用于判断某个类是否是另一个类父类的类模板。

#include "killCmake.h"#include<string>using namespace std;class A
{
};class B : public A
{
public:B(int x): x_(x){}
private:int x_;
};//template<typename Base,typename Derived>
//struct is_base_of {...};int main()
{std::cout << std::is_base_of<A, A>::value << std::endl;std::cout << std::is_base_of<B, A>::value << std::endl;std::cout << std::is_base_of<A, B>::value << std::endl;return 0;
}

在这里插入图片描述
C++ 17标准中又引入了变量模板简化std::is_base_of的书写。

#include "killCmake.h"#include<string>using namespace std;class A
{
};class B : public A
{
public:B(int x): x_(x){}
private:int x_;
};//template<typename Base,typename Derived>
//struct is_base_of {...};template<class Base,class Derived>
inline constexpr bool is_base_of_v_v = std::is_base_of<Base, Derived>::value;int main()
{std::cout << std::is_base_of<A, A>::value << std::endl;std::cout << std::is_base_of<B, A>::value << std::endl;std::cout << std::is_base_of<A, B>::value << std::endl;std::cout << std::endl;// 简化版本std::cout << is_base_of_v_v<A, A> << std::endl;std::cout << is_base_of_v_v<B, A> << std::endl;std::cout << is_base_of_v_v<A, B> << std::endl;return 0;
}

在这里插入图片描述
std::is_base_of的实现代码,写一个IsBaseOf类模板来实现,代码如下。

#include "killCmake.h"#include<string>using namespace std;class A
{
};class B : public A
{
public:B(int x): x_(x){}
private:int x_;
};//template<typename Base,typename Derived>
//struct is_base_of {...};template<class Base,class Derived>
inline constexpr bool is_base_of_v_v = std::is_base_of<Base, Derived>::value;template<typename Base,typename Derived> // <父类,子类>
class IsBaseOf
{
private:template<typename T>static std::true_type test(T*);template<typename>static std::false_type test(void*);template<typename B,typename D>static auto test_middle() -> decltype(test<B>(static_cast<D*>(nullptr)));// 调用test()public:static constexpr bool value = IsSameType < std::integral_constant<bool, std::is_class_v<Base>&& std::is_class_v<Derived>&& decltype(test_middle<Base, Derived>())::value, std::integral_constant<bool, true>>::value;
};int main()
{std::cout << std::is_base_of<A, A>::value << std::endl;std::cout << std::is_base_of<B, A>::value << std::endl;std::cout << std::is_base_of<A, B>::value << std::endl;std::cout << std::endl;// 简化版本std::cout << is_base_of_v_v<A, A> << std::endl;std::cout << is_base_of_v_v<B, A> << std::endl;std::cout << is_base_of_v_v<A, B> << std::endl;return 0;
}

未完待续,干他菊花就对了

相关文章:

C++新经典模板与泛型编程:用成员函数重载实现is_base_of

用成员函数重载实现is_base_of std::is_base_of是一个C 11标准中用于判断某个类是否是另一个类父类的类模板。 #include "killCmake.h"#include<string>using namespace std;class A { };class B : public A { public:B(int x): x_(x){} private:int x_; };/…...

【vue3】处理数组方法,在数组中获取指定条件所在的数组对象等持续更新笔记~~

1、在数组中获取指定条件所在的数组对象 &#xff08;1&#xff09;filter方法获取到的是包含指定项的数组 data.checkRow res.result.filter(item > item.checked 1);打印&#xff1a; &#xff08;2&#xff09;map方法取到的是包含指定项的数组&#xff0c;如果满足…...

digit函数

题目描述 在程序中定义一函数 digit(n,k)&#xff0c;它能分离出整数 n 从右边数第 k 个数字。 输入格式 正整数 n 和 k。 输出格式 一个数字。 输入输出样例 输入 #1 31859 3 输出 #1 8 说明/提示 n≤10^9。 k≤10。 因为用整数n来做有点难&#xff0c;所以我用…...

Linux中的堡垒机搭建以及使用

JumpServer搭建 安装应用包 curl -sSL https://resource.fit2cloud.com/jumpserver/jumpserver/releases/latest/download/quick_start.sh | bash 一路回车即可安装完毕&#xff08;可根据需求更改&#xff09; JumpServer的 配置文件路径 /opt/jumpserver/config/config.tx…...

ubuntu安装微信客户端

安装 Wine 环境 Wine环境包下载地址&#xff1a;http://archive.ubuntukylin.com/software/pool/partner/ukylin-wine_70.6.3.25_amd64.deb 下载完安装包后在命令行运行以下命令安装环境&#xff1a; sudo apt-get install -f -y ./ukylin-wine_70.6.3.25_amd64.deb 安装微信…...

ajax清空所有表单内容,包括input标签、单选框radio、多选框CheckBox、下拉框select以及文本域内容

为了实现重置并清空表单内容&#xff0c;你可以使用 jQuery 的 val 方法将各种表单元素的值设置为空字符串&#xff0c;并通过 layui 的 form.render 方法来更新表单的渲染。以下是修改后的代码&#xff1a; layui.use(["form", "laydate", "jquery&…...

通配符用法

在本篇文章中&#xff0c;本文将说明通配符用法。 &#xff08;1&#xff09;概述 通配符是在Linux命令中用于匹配文件名的特殊字符。它们可以帮助我们快速定位和操作文件。本文将介绍一些常用的通配符及其示例用法。 通配符是一种用于模式匹配的特殊字符。在计算机领域中&am…...

如何从eureka-server上进行服务发现,负载均衡远程调用服务

在spring cloud的maven的pom文件中添加eureka-client的依赖坐标 <!--eureka-client依赖--><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-netflix-eureka-client</artifactId></dependen…...

Flutter实现Android拖动到垃圾桶删除效果-Draggable和DragTarget的详细讲解

文章目录 Draggable介绍构造函数参数说明使用示例 DragTarget 介绍构造函数参数说明使用示例 DragTarget 如何接收Draggable传递过来的数据&#xff1f; Draggable介绍 Draggable是Flutter框架中的一个小部件&#xff0c;用于支持用户通过手势拖动一个子部件。它是基于手势的一…...

Nacos和Eureka冲突问题原因分析

目录 一、问题现象二、解决办法三、原因分析 一、问题现象 Description:Field autoServiceRegistration in org.springframework.cloud.client.serviceregistry.AutoServiceRegistrationAutoConfiguration required a single bean, but 2 were found:- eurekaAutoServiceRegis…...

『C++成长记』拷贝构造函数

&#x1f525;博客主页&#xff1a;小王又困了 &#x1f4da;系列专栏&#xff1a;C &#x1f31f;人之为学&#xff0c;不日近则日退 ❤️感谢大家点赞&#x1f44d;收藏⭐评论✍️ 目录 一、拷贝构造函数 &#x1f4d2;1.1拷贝构造函数的概念 &#x1f4d2;1.2拷贝构造…...

B 站基于 StarRocks 构建大数据元仓

作者&#xff1a;bilibili 大数据高级开发工程师 杨洋 B站大数据元仓是一款用来观测大数据引擎运行情况、推动大作业治理的系统诊断产品。经过调研和性能测试&#xff0c;大数据元仓最终以 StarRocks 为技术底座&#xff0c;从实际的应用效果来看&#xff0c;大部分查询都能在几…...

最常用的4种光纤接口结构

光纤接口&#xff0c;全名是光纤活动连接器。光纤连接器就是用于光纤与光纤之间进行可拆卸连接的器件&#xff0c;它是把光纤的两个端面精密的对接起来&#xff0c;使光能量前后达到最大程度的耦合。 光纤连接器属于高精密的器件&#xff0c;最常见结构形式可分包括&#xff1a…...

Axure网页端高交互组件库, 下拉菜单文件上传穿梭框日期城市选择器

作品说明 组件数量&#xff1a;共 11 套 兼容软件&#xff1a;Axure RP 9/10&#xff0c;不支持低版本 应用领域&#xff1a;web端原型设计、桌面端原型设计 作品特色 本作品为「web端组件库」&#xff0c;高保真高交互 (带仿真功能效果)&#xff1b;运用了动态面板、中继…...

基于Java新人入职管理系统

基于Java新人入职管理系统 功能需求 1、个人信息管理&#xff1a;系统需要提供个人信息管理功能&#xff0c;包括新人的基本信息、联系方式、教育背景、工作经历等。 2、入职流程管理&#xff1a;系统需要提供入职流程管理功能&#xff0c;包括入职手续的办理、合同签订、入…...

Python实战 | 如何抓取腾讯视频

嗨喽~大家好呀&#xff0c;这里是魔王呐 ❤ ~! python更多源码/资料/解答/教程等 点击此处跳转文末名片免费获取 爬虫: 作用: 批量采集数据 / 模拟用户行为 原理: 模拟成 客户端 向 服务器 发送网络请求 环境介绍: python 3.8 解释器 pycharm 编辑器 第三方模块: reques…...

总结MySQL 的一些知识点:MySQL 导出数据

MySQL 导出数据 MySQL中你可以使用SELECT...INTO OUTFILE语句来简单的导出数据到文本文件上。 使用 SELECT ... INTO OUTFILE 语句导出数据 以下实例中我们将数据表 kxdang_tbl 数据导出到 /tmp/kxdang.txt 文件中: mysql> SELECT * FROM kxdang_tbl -> INTO OUTFILE /…...

C语言-字符串操作函数-附加使用方式

文章目录 前言字符串复制-strcpy字符串复制&#xff08;按照位数&#xff09;-strncpy字符串比较-strcmp字符串比较(按照位数)-strncmp不区分大小写的字符串比较-strcasecmp不区分大小写的比较(前n位)-strncasecmp字符串按照格式写入-sprintf字符串按照格式和个数写入-snprintf…...

06-React组件 Redux React-Redux

React组件化&#xff08;以Ant-Design为例&#xff09; 组件化编程&#xff0c;只需要去安装好对应的组件&#xff0c;然后通过各式各样的组件引入&#xff0c;实现快速开发 我们这里学习的是 Ant-design &#xff08;应该是这样&#xff09;&#xff0c;它有很多的组件供我们…...

Windows安装卸载MySQL

【官方】MySQL参考手册&#xff1a;介绍MySQL Server、SQL、InnoDB存储引擎、复制等。 Windows 卸载 MySQL 删除程序 【win x】 > p &#xff0c;在安装的程序中卸载MySQL相关删除安装目录和数据文件夹 D:\ProgramFiles\MySQL C:\ProgramData\MySQL删除服务 【win r】 &…...

别再对着手册发愁了!手把手教你用FPGA搞定AD9361的CMOS数据接口(附Verilog代码)

从零构建AD9361 CMOS接口&#xff1a;Verilog实战指南与时钟域避坑策略 第一次拿到PlutoSDR开发板时&#xff0c;看着AD9361数据手册里那些密密麻麻的时序图&#xff0c;我盯着示波器发呆了半小时——理论上的时序要求和实际FPGA代码实现之间&#xff0c;仿佛隔着一道看不见的…...

【免费下载】 STM32使用AD7799芯片读取AD值

STM32使用AD7799芯片读取AD值 【下载地址】STM32使用AD7799芯片读取AD值 本项目是基于STM32F103系列单片机&#xff0c;实现对AD7799高精度24位模数转换器&#xff08;ADC&#xff09;的数据采集。AD7799是一种高性能、低功耗的模拟到数字转换器&#xff0c;支持多种输入范围和…...

别再手动复制粘贴了!用poi-tl + Spring Boot自动生成带表格、二维码的Word领料单(附完整源码)

基于poi-tl的Spring Boot领料单自动化生成实战指南 在企业日常运营中&#xff0c;领料单这类标准化文档的生成往往占据大量重复性工作时间。传统的手工复制粘贴不仅效率低下&#xff0c;还容易出错。本文将介绍如何利用poi-tl这一强大的Word模板引擎&#xff0c;结合Spring Bo…...

从零到精通:Unity Timeline信号(Signal)与自定义轨道(Playable Track)的保姆级教程

从零到精通&#xff1a;Unity Timeline信号与自定义轨道实战指南 在Unity中制作电影级过场动画时&#xff0c;Timeline无疑是开发者最强大的工具之一。但许多开发者仅仅停留在基础动画剪辑的层面&#xff0c;未能充分挖掘其深度交互潜力。本文将带您突破常规用法&#xff0c;探…...

3分钟掌握NCM音乐解密:ncmdump工具让你的音乐随处播放

3分钟掌握NCM音乐解密&#xff1a;ncmdump工具让你的音乐随处播放 【免费下载链接】ncmdump 项目地址: https://gitcode.com/gh_mirrors/ncmd/ncmdump 你是否曾经下载了网易云音乐的NCM格式歌曲&#xff0c;却发现无法在其他设备上播放&#xff1f;这种专有加密格式虽然…...

基于RP2040与CircuitPython的复古电话点歌系统:从矩阵键盘到音频播放

1. 项目概述&#xff1a;当复古电话遇见现代微控制器几年前&#xff0c;我在一个旧货市场淘到了一台成色还不错的Western Electric 2500DM电话机。这种经典的按键式电话&#xff0c;拿在手里沉甸甸的&#xff0c;听筒里仿佛还残留着上个世纪的通话声。当时我就在想&#xff0c;…...

Artisan烘焙软件:基于Python的开源咖啡烘焙控制与数据分析平台

Artisan烘焙软件&#xff1a;基于Python的开源咖啡烘焙控制与数据分析平台 【免费下载链接】artisan artisan: the worlds most trusted roasting software 项目地址: https://gitcode.com/gh_mirrors/ar/artisan Artisan是一款采用Python技术栈构建的开源咖啡烘焙控制软…...

QuickLookVideo:让Mac上的视频文件管理变得轻松直观

QuickLookVideo&#xff1a;让Mac上的视频文件管理变得轻松直观 【免费下载链接】QuickLookVideo This package allows macOS Finder to display thumbnails, static QuickLook previews, cover art and metadata for most types of video files. 项目地址: https://gitcode.…...

深耕 AI 全域布局,探词科技凭硬核实力领跑 GEO 新赛道

在人工智能全面渗透各行各业的当下&#xff0c;传统线上流量玩法逐渐触顶&#xff0c;依托大模型生态搭建品牌长效传播阵地&#xff0c;已然成为企业数字化转型的核心突破口。作为国内专注 AI 品牌全域布局的专业服务商&#xff0c;探词科技深耕 GEO 智能优化领域&#xff0c;凭…...

移动端部署实战:用PyTorch实现的MobileNetV2模型,教你如何压缩并部署到安卓设备

移动端AI模型部署实战&#xff1a;从PyTorch到安卓的MobileNetV2全流程指南 在移动设备上部署深度学习模型已成为AI落地的关键环节。想象一下&#xff0c;当你用手机拍照时实时识别人物和场景&#xff0c;或是通过智能家居摄像头检测异常行为——这些场景背后都离不开高效、轻量…...