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】 &…...
别再对着手册发愁了!手把手教你用FPGA搞定AD9361的CMOS数据接口(附Verilog代码)
从零构建AD9361 CMOS接口:Verilog实战指南与时钟域避坑策略 第一次拿到PlutoSDR开发板时,看着AD9361数据手册里那些密密麻麻的时序图,我盯着示波器发呆了半小时——理论上的时序要求和实际FPGA代码实现之间,仿佛隔着一道看不见的…...
【免费下载】 STM32使用AD7799芯片读取AD值
STM32使用AD7799芯片读取AD值 【下载地址】STM32使用AD7799芯片读取AD值 本项目是基于STM32F103系列单片机,实现对AD7799高精度24位模数转换器(ADC)的数据采集。AD7799是一种高性能、低功耗的模拟到数字转换器,支持多种输入范围和…...
别再手动复制粘贴了!用poi-tl + Spring Boot自动生成带表格、二维码的Word领料单(附完整源码)
基于poi-tl的Spring Boot领料单自动化生成实战指南 在企业日常运营中,领料单这类标准化文档的生成往往占据大量重复性工作时间。传统的手工复制粘贴不仅效率低下,还容易出错。本文将介绍如何利用poi-tl这一强大的Word模板引擎,结合Spring Bo…...
从零到精通:Unity Timeline信号(Signal)与自定义轨道(Playable Track)的保姆级教程
从零到精通:Unity Timeline信号与自定义轨道实战指南 在Unity中制作电影级过场动画时,Timeline无疑是开发者最强大的工具之一。但许多开发者仅仅停留在基础动画剪辑的层面,未能充分挖掘其深度交互潜力。本文将带您突破常规用法,探…...
3分钟掌握NCM音乐解密:ncmdump工具让你的音乐随处播放
3分钟掌握NCM音乐解密:ncmdump工具让你的音乐随处播放 【免费下载链接】ncmdump 项目地址: https://gitcode.com/gh_mirrors/ncmd/ncmdump 你是否曾经下载了网易云音乐的NCM格式歌曲,却发现无法在其他设备上播放?这种专有加密格式虽然…...
基于RP2040与CircuitPython的复古电话点歌系统:从矩阵键盘到音频播放
1. 项目概述:当复古电话遇见现代微控制器几年前,我在一个旧货市场淘到了一台成色还不错的Western Electric 2500DM电话机。这种经典的按键式电话,拿在手里沉甸甸的,听筒里仿佛还残留着上个世纪的通话声。当时我就在想,…...
Artisan烘焙软件:基于Python的开源咖啡烘焙控制与数据分析平台
Artisan烘焙软件:基于Python的开源咖啡烘焙控制与数据分析平台 【免费下载链接】artisan artisan: the worlds most trusted roasting software 项目地址: https://gitcode.com/gh_mirrors/ar/artisan Artisan是一款采用Python技术栈构建的开源咖啡烘焙控制软…...
QuickLookVideo:让Mac上的视频文件管理变得轻松直观
QuickLookVideo:让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 新赛道
在人工智能全面渗透各行各业的当下,传统线上流量玩法逐渐触顶,依托大模型生态搭建品牌长效传播阵地,已然成为企业数字化转型的核心突破口。作为国内专注 AI 品牌全域布局的专业服务商,探词科技深耕 GEO 智能优化领域,凭…...
移动端部署实战:用PyTorch实现的MobileNetV2模型,教你如何压缩并部署到安卓设备
移动端AI模型部署实战:从PyTorch到安卓的MobileNetV2全流程指南 在移动设备上部署深度学习模型已成为AI落地的关键环节。想象一下,当你用手机拍照时实时识别人物和场景,或是通过智能家居摄像头检测异常行为——这些场景背后都离不开高效、轻量…...
