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、在数组中获取指定条件所在的数组对象 (1)filter方法获取到的是包含指定项的数组 data.checkRow res.result.filter(item > item.checked 1);打印: (2)map方法取到的是包含指定项的数组,如果满足…...
digit函数
题目描述 在程序中定义一函数 digit(n,k),它能分离出整数 n 从右边数第 k 个数字。 输入格式 正整数 n 和 k。 输出格式 一个数字。 输入输出样例 输入 #1 31859 3 输出 #1 8 说明/提示 n≤10^9。 k≤10。 因为用整数n来做有点难,所以我用…...
Linux中的堡垒机搭建以及使用
JumpServer搭建 安装应用包 curl -sSL https://resource.fit2cloud.com/jumpserver/jumpserver/releases/latest/download/quick_start.sh | bash 一路回车即可安装完毕(可根据需求更改) JumpServer的 配置文件路径 /opt/jumpserver/config/config.tx…...
ubuntu安装微信客户端
安装 Wine 环境 Wine环境包下载地址:http://archive.ubuntukylin.com/software/pool/partner/ukylin-wine_70.6.3.25_amd64.deb 下载完安装包后在命令行运行以下命令安装环境: sudo apt-get install -f -y ./ukylin-wine_70.6.3.25_amd64.deb 安装微信…...
ajax清空所有表单内容,包括input标签、单选框radio、多选框CheckBox、下拉框select以及文本域内容
为了实现重置并清空表单内容,你可以使用 jQuery 的 val 方法将各种表单元素的值设置为空字符串,并通过 layui 的 form.render 方法来更新表单的渲染。以下是修改后的代码: layui.use(["form", "laydate", "jquery&…...
通配符用法
在本篇文章中,本文将说明通配符用法。 (1)概述 通配符是在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传递过来的数据? Draggable介绍 Draggable是Flutter框架中的一个小部件,用于支持用户通过手势拖动一个子部件。它是基于手势的一…...
Nacos和Eureka冲突问题原因分析
目录 一、问题现象二、解决办法三、原因分析 一、问题现象 Description:Field autoServiceRegistration in org.springframework.cloud.client.serviceregistry.AutoServiceRegistrationAutoConfiguration required a single bean, but 2 were found:- eurekaAutoServiceRegis…...
『C++成长记』拷贝构造函数
🔥博客主页:小王又困了 📚系列专栏:C 🌟人之为学,不日近则日退 ❤️感谢大家点赞👍收藏⭐评论✍️ 目录 一、拷贝构造函数 📒1.1拷贝构造函数的概念 📒1.2拷贝构造…...
B 站基于 StarRocks 构建大数据元仓
作者:bilibili 大数据高级开发工程师 杨洋 B站大数据元仓是一款用来观测大数据引擎运行情况、推动大作业治理的系统诊断产品。经过调研和性能测试,大数据元仓最终以 StarRocks 为技术底座,从实际的应用效果来看,大部分查询都能在几…...
最常用的4种光纤接口结构
光纤接口,全名是光纤活动连接器。光纤连接器就是用于光纤与光纤之间进行可拆卸连接的器件,它是把光纤的两个端面精密的对接起来,使光能量前后达到最大程度的耦合。 光纤连接器属于高精密的器件,最常见结构形式可分包括:…...
Axure网页端高交互组件库, 下拉菜单文件上传穿梭框日期城市选择器
作品说明 组件数量:共 11 套 兼容软件:Axure RP 9/10,不支持低版本 应用领域:web端原型设计、桌面端原型设计 作品特色 本作品为「web端组件库」,高保真高交互 (带仿真功能效果);运用了动态面板、中继…...
基于Java新人入职管理系统
基于Java新人入职管理系统 功能需求 1、个人信息管理:系统需要提供个人信息管理功能,包括新人的基本信息、联系方式、教育背景、工作经历等。 2、入职流程管理:系统需要提供入职流程管理功能,包括入职手续的办理、合同签订、入…...
Python实战 | 如何抓取腾讯视频
嗨喽~大家好呀,这里是魔王呐 ❤ ~! 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字符串复制(按照位数)-strncpy字符串比较-strcmp字符串比较(按照位数)-strncmp不区分大小写的字符串比较-strcasecmp不区分大小写的比较(前n位)-strncasecmp字符串按照格式写入-sprintf字符串按照格式和个数写入-snprintf…...
06-React组件 Redux React-Redux
React组件化(以Ant-Design为例) 组件化编程,只需要去安装好对应的组件,然后通过各式各样的组件引入,实现快速开发 我们这里学习的是 Ant-design (应该是这样),它有很多的组件供我们…...
Windows安装卸载MySQL
【官方】MySQL参考手册:介绍MySQL Server、SQL、InnoDB存储引擎、复制等。 Windows 卸载 MySQL 删除程序 【win x】 > p ,在安装的程序中卸载MySQL相关删除安装目录和数据文件夹 D:\ProgramFiles\MySQL C:\ProgramData\MySQL删除服务 【win r】 &…...
英语祈使句结构
英语祈使句:极简结构 + 直白例句(一看就懂) 核心: 主语一律省略(默认 You 你 / 你们),直接用动词开头,用来命令 / 请求 / 禁止 一、基础核心结构(3 种万能模板) 1 肯定祈使句(直接让做某事) 结构:动词原形 + 其他成分(宾语 / 状语) 例句: Open the door.…...
使用 Applications Manager 实现 AWS 云监控:保障业务应用高效运行
随着企业加速将应用和服务迁移至云端,Amazon Web Services(AWS)凭借其可扩展性、可靠性及成本效益,成为主流选择。然而,云环境日益复杂,企业亟需强大的监控系统,以确保应用稳定运行。Applicatio…...
定制化水源热泵技术,实现低品位余热高效捕获
低品位余热的高效回收利用,核心在于能否打造出适配水源特性与工况需求的核心热泵机组,只有实现对余热资源的精准捕获,才能真正将闲置余热转化为可利用的清洁能源。针对鲁西南矿区的水源特性与极端气候工况,瑞冬为当地某铁矿项目针…...
Visual C++运行库全解析:从问题诊断到高效部署的完整指南
Visual C运行库全解析:从问题诊断到高效部署的完整指南 【免费下载链接】vcredist AIO Repack for latest Microsoft Visual C Redistributable Runtimes 项目地址: https://gitcode.com/gh_mirrors/vc/vcredist 问题诊断:运行库故障的典型表现与…...
颠覆级硬件调校工具:GHelper重新定义华硕笔记本性能控制体验
颠覆级硬件调校工具:GHelper重新定义华硕笔记本性能控制体验 【免费下载链接】g-helper Lightweight, open-source control tool for ASUS laptops and ROG Ally. Manage performance modes, fans, GPU, battery, and RGB lighting across Zephyrus, Flow, TUF, Str…...
Nature重磅:量子生物学重大突破
来源:一直奇怪2026 年 3 月 18 日,斯坦福大学的研究人员在国际顶尖学术期刊 Nature 上发表了题为:Magnetic resonance control of spin-correlated radical pair dynamics in vivo 的研究论文。该研究首次在活体多细胞动物中利用磁共振技术精…...
Zotero-Better-Notes终极绘图功能指南:如何在学术笔记中创建可视化图表
Zotero-Better-Notes终极绘图功能指南:如何在学术笔记中创建可视化图表 【免费下载链接】zotero-better-notes Everything about note management. All in Zotero. 项目地址: https://gitcode.com/gh_mirrors/zo/zotero-better-notes 作为一名学术研究者&…...
鸣潮智能助手:提升游戏体验的AI解决方案
鸣潮智能助手:提升游戏体验的AI解决方案 【免费下载链接】ok-wuthering-waves 鸣潮 后台自动战斗 自动刷声骸 一键日常 Automation for Wuthering Waves 项目地址: https://gitcode.com/GitHub_Trending/ok/ok-wuthering-waves 您是否曾遇到这样的困扰&#…...
Source Sans 3:现代UI设计的无衬线字体解决方案
Source Sans 3:现代UI设计的无衬线字体解决方案 【免费下载链接】source-sans Sans serif font family for user interface environments 项目地址: https://gitcode.com/gh_mirrors/so/source-sans 30秒快速了解 全字重覆盖:从ExtraLight到Blac…...
实战应用:基于快马ai为全栈项目快速构建集成wsl2开发环境
实战应用:基于快马AI为全栈项目快速构建集成WSL2开发环境 最近在准备一个全栈项目,需要同时开发Python Django后端和Vue.js前端。为了保持开发环境的一致性,我决定使用WSL2来搭建开发环境。下面记录下我的完整配置过程,希望能帮助…...
