当前位置: 首页 > 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】 &…...

英语祈使句结构

英语祈使句:极简结构 + 直白例句(一看就懂) 核心: 主语一律省略(默认 You 你 / 你们),直接用动词开头,用来命令 / 请求 / 禁止 一、基础核心结构(3 种万能模板) 1 肯定祈使句(直接让做某事) 结构:动词原形 + 其他成分(宾语 / 状语) 例句: Open the door.…...

使用 Applications Manager 实现 AWS 云监控:保障业务应用高效运行

随着企业加速将应用和服务迁移至云端&#xff0c;Amazon Web Services&#xff08;AWS&#xff09;凭借其可扩展性、可靠性及成本效益&#xff0c;成为主流选择。然而&#xff0c;云环境日益复杂&#xff0c;企业亟需强大的监控系统&#xff0c;以确保应用稳定运行。Applicatio…...

定制化水源热泵技术,实现低品位余热高效捕获

低品位余热的高效回收利用&#xff0c;核心在于能否打造出适配水源特性与工况需求的核心热泵机组&#xff0c;只有实现对余热资源的精准捕获&#xff0c;才能真正将闲置余热转化为可利用的清洁能源。针对鲁西南矿区的水源特性与极端气候工况&#xff0c;瑞冬为当地某铁矿项目针…...

Visual C++运行库全解析:从问题诊断到高效部署的完整指南

Visual C运行库全解析&#xff1a;从问题诊断到高效部署的完整指南 【免费下载链接】vcredist AIO Repack for latest Microsoft Visual C Redistributable Runtimes 项目地址: https://gitcode.com/gh_mirrors/vc/vcredist 问题诊断&#xff1a;运行库故障的典型表现与…...

颠覆级硬件调校工具:GHelper重新定义华硕笔记本性能控制体验

颠覆级硬件调校工具&#xff1a;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重磅:量子生物学重大突破

来源&#xff1a;一直奇怪2026 年 3 月 18 日&#xff0c;斯坦福大学的研究人员在国际顶尖学术期刊 Nature 上发表了题为&#xff1a;Magnetic resonance control of spin-correlated radical pair dynamics in vivo 的研究论文。该研究首次在活体多细胞动物中利用磁共振技术精…...

Zotero-Better-Notes终极绘图功能指南:如何在学术笔记中创建可视化图表

Zotero-Better-Notes终极绘图功能指南&#xff1a;如何在学术笔记中创建可视化图表 【免费下载链接】zotero-better-notes Everything about note management. All in Zotero. 项目地址: https://gitcode.com/gh_mirrors/zo/zotero-better-notes 作为一名学术研究者&…...

鸣潮智能助手:提升游戏体验的AI解决方案

鸣潮智能助手&#xff1a;提升游戏体验的AI解决方案 【免费下载链接】ok-wuthering-waves 鸣潮 后台自动战斗 自动刷声骸 一键日常 Automation for Wuthering Waves 项目地址: https://gitcode.com/GitHub_Trending/ok/ok-wuthering-waves 您是否曾遇到这样的困扰&#…...

Source Sans 3:现代UI设计的无衬线字体解决方案

Source Sans 3&#xff1a;现代UI设计的无衬线字体解决方案 【免费下载链接】source-sans Sans serif font family for user interface environments 项目地址: https://gitcode.com/gh_mirrors/so/source-sans 30秒快速了解 全字重覆盖&#xff1a;从ExtraLight到Blac…...

实战应用:基于快马ai为全栈项目快速构建集成wsl2开发环境

实战应用&#xff1a;基于快马AI为全栈项目快速构建集成WSL2开发环境 最近在准备一个全栈项目&#xff0c;需要同时开发Python Django后端和Vue.js前端。为了保持开发环境的一致性&#xff0c;我决定使用WSL2来搭建开发环境。下面记录下我的完整配置过程&#xff0c;希望能帮助…...