新C++(15):可调用对象及包装

"彼岸岸上寻找,而天空爱上了飞鸟。"
void (*signal(int signum,void(*handler)(int))))(int);
上述给你一段这样的代码,你能知道这是什么嘛?唔...,似乎有点打脑壳。这是什么鬼??如果你把void后面的一些进行省略成这个的形式: void (*)(int),也许你会脱口而出,这是函数指针!
是的,这是一个经典的信号处理函数。那本章是为了来讲C语言那天马行空般恼人的函数指针??肯定不是,这个任务得去交给学习C语言指针时该去做的。函数指针的本质,就是函数入口的地址,但显然这对我们尤其是初学者特别不友好,这层层嵌套,何时才能嵌套得完?
因此,C++提供了其他的方式来替代传统式函数指针的应用。
---前言
一、什么是可调用对象
可调用对象除开传统的函数指针,C++还提供了其他两种调用对象。
①仿函数
②lambda表达式
二、仿函数
如果我们需要一个函数,实现两个数的加法。
//传统写法 无非就是定义函数
int AddFunc(int x, int y)
{return x + y;
}
但是呢,C++引入了仿函数的语法之后,与普通函数相比较,仿函数的使用更加便利。
所谓仿函数,就是让一个类,像函数一样去使用
struct AddObj
{int operator()(int x, int y){return x + y;}
};

也许你会说,啊你这仿函数用起来,也不比普通函数调用简单多少,还不如原来普通函数调用呢。是的,对于上述这中情况,普通函数调用和仿函数似乎都很简单。

struct Func2
{int operator()(int base, int n){for (int i = 1;i <= n;++i){base += i;}return base;}
};template<class Func>
class Num
{
public:int accmulate(int n){return Func()(_base, n);}private:int _base = 0;
};
显然,当面对这种情况,仿函数可以作为参数传递给一个类的模板作参数,仅凭这一点,仿函数的实用性其实就比普通函数广太多了。

三、lambda表达式
C++11等于说"抄了别人语法的作业",但确实lambda表达式的出现是非常成功便捷的。
(1)lambda表达式语法
[capture-list](parameters)mutable->return-type{ statement };
[cpature-list] : 捕捉列表。编译器会根据[]来判断是否是lambda表达式,能够捕获该代码段内的上下文变量供lambda函数体使用。
(parameters):参数列表如果不需要参数传递,则可以连同()一起省略。
->returntype:返回值类型(可以省略不写,由编译器对返回类型进行推导)。
mutable:默认情况下,lambda函数总是一个const函数,mutable可以取消其常量性。使用该修饰符时,参数列表不可省略(即使参数为空)。
{statement}:函数体。该函数体可以使用其参数、以及捕获列表中捕获的对象。
(2)lambda表达式的应用
lambda表达式的语法稍微过了一遍后,我们来看看它的应用吧。
//1.最简单的lambda表达式//参数没有可以不用写 、 返回值也可以让编译器 推导[] {};//2.捕获上下文变量int a = 3, b = 4;auto f = [=] { return a + b;};cout << f() << endl;

使用=、&捕捉:
我们现在想使用一个lambda表达式 交换两个数的值。
auto f1 = [](int& a, int& b){int tmp = a;a = b;b = tmp;};//引用或者叫取地址捕捉auto f2 = [&]{int tmp = a;a = b;b = tmp;};

这样我们就能通过写lambda表达式,写一个简易的swap函数。
四、包装器与绑定
如果我们看到这个代码, ret = Func(x)。
这个Func是什么??emm它可能是一个函数调用,可能是一个仿函数,也可能是一个lambda表达式。因为这些都是可调用对象。
我们再来看看下面的一份代码:
template<class F, class T>
T useF(F f, T x)
{static int count = 0;cout << "count:" << ++count << endl;cout << "count:" << &count << endl;return f(x);
}double f(double i)
{return i / 2;
}struct Functor
{double operator()(double d){return d / 3;}
};

我们用三个不同的可调用对象,函数名、仿函数、lambda仿函数作为函数参数模板传入类useF中。

他们的功能如出一辙,但是唯一不同的是,我们在useF类中定义的静态成员变量Count是存在多份的。也就意味着,在useF实例化对象时,实际上是实例化出3份功能相同的函数的。
但是如果我们只想让这个类实例化出一份函数呢?这时候就需要用到我们的包装器。
(1)function
function是一个适配器,其底层就是一个类模板。

其类原型如下:
#inclued <functional>template<class Ret,class... Args>
class function<Ret(Args...)>
{}
Ret:可调用对象的返回值类型
Args:这里是一个可变参数 可调用对象参数列表
function的应用:
int f(int a, int b)
{return a + b;
}struct Functor
{
public:int operator() (int a, int b){return a + b;}
};
我们完成对这些函数的包装器。

对类函数包装:
包装器对类成员的包装也常用。不过相对于可调用对象而言,它传入的参数会多一个。
class Plus
{
public:static int plusi(int a, int b){return a + b;}double plusd(double a, double b){return a + b;}
}

值得注意的是,若要访问类成员函数。
需要在function参数加 该类类型。 并且在使用时需要进行传参。
对于静态函数而言,可以不需要"&",但是对于成员函数必须要"&"。因此,最好的写法是,都取"地址"。
因此,有了function包装器,我们可以尝试着对那个我们之前面对的问题(解决模板的效率低下,实例化多份)做出一定的回应。

此时,当函数实例化时,函数内的count只有一个。也就是说只实例化出了一个函数。
包装器的其他应用场景
包装器还有其他应用的场景,并使用起来后,更加简洁、便于维护。下面是一个leetcode题。

进行更改后,可以变成这样。

(2)bind
std::bind函数定义在头文件中,是一个函数模板,它就像一个函数包装器(适配器),接受一个可
调用对象(callable object),生成一个新的可调用对象来“适应”原对象的参数列表。

其原型如下:
template <class Fn, class... Args>
/* unspecified */ bind (Fn&& fn, Args&&... args);
// with return type (2)
template <class Ret, class Fn, class... Args>
/* unspecified */ bind (Fn&& fn, Args&&... args);
这个函数模板,时常用来固定下来一些参数,也可以实现传参参数的顺序调整。
placeholders:

这是bind的参数,是一个命名空间。
bind函数应用:
如果我们需要调用一个普通函数,需要这样的用法。

如果我们需要调用一个成员函数,需要这样的用法。

总结
那么以上也就是本篇的所有内容,"C++11的语法让C++不再是C++",这句话现如今让我深有体会。当然,这些内容有一些是十分好用的,比如说lambda表示,function在一些场景时使用,也是十分"香的"。然而,深入学习一门语言本身就是这样得繁琐,乏味。也望诸君的努力不会白费。
本篇到此结束,感谢你的阅读。
祝你好运,向阳而生~
相关文章
- 微信小程序-微信小程序登录流程(一)
微信小程序,小程序的一种,英文名Wechat Mini Program,是一种不需要下载安装即可使用的应用,它实现了应用“触手可及”的梦想,用户扫一扫或搜一下即可打开应用 冷启动: 小程序首次打开或销毁后再次被打开&…...
2023/3/28 15:43:29 - C++初级教程(三)
一、C的一维数组 C 支持数组数据结构,它可以存储一个固定大小的相同类型元素的顺序集合。数组是用来存储一系列数据,但它往往被认为是一系列相同类型的变量。 数组的声明并不是声明一个个单独的变量,而是声明一个数组变量,比如 …...
2023/3/28 15:42:13 - Github上得分最高的20个项目
freeCodeCamp:一个流行的编程教育平台,目标是让任何人都能够免费学习编程。 Vscode:一个流行的跨平台文本编辑器,支持各种语言和框架,可通过扩展进行自定义。 React:一个流行的 JavaScript 库,…...
2023/3/28 15:41:28 - 【java缓存、redis缓存、guava缓存】java中实现缓存的几种方式
一、通过HashMap实现缓存 这种方式可以简单实现本地缓存,但是实际开发中不推荐使用,下面我们来实现一下这种方式。 首先创建一个管理缓存的类 public class LocalCache {public static HashMap<String,String> cache new HashMap<>();sta…...
2023/3/28 15:37:22 - 从应用火到股市 AIGC概念股连涨仨月
AI有变革生产力之势,证券市场闻风而动。同花顺数据显示,AIGC概念指数年内上涨近60%,涨幅是上证指数的10倍多。 具体到个股,软通动力、远大智能等搭上AI风口的企业服务商“老树发新芽”,直接涨停。游戏板块霸榜产品回报…...
2023/3/28 15:37:03 - linux突破git clone下载限制
前言 本人要在linux下载一个2.5G的文件,但只有20kb/s,实在忍受不了,最终利用工具实现了800kb/s的速度,除了利用工具的方法,本人都尝试了,但是几乎没有效果,我也会罗列出来,可自行尝试…...
2023/3/28 15:36:50 - x86架构利用docker去编译arm64的应用程序
文章目录1. 交叉编译:toolchain2. 隔离挂载的方式:3. QEMU 或其他模拟器来实际运行dockerx86架构实现多平台系统代码的编译,实现方式有多种:交叉编译:toolchain 【新的第三方库不好处理】隔离挂载的方式 【速度慢&…...
2023/3/28 15:33:40 - Apache Camel
目录儿一、简介二、核心总结一、简介 Camel is an Open Source integration framework that empowers you to quickly and easily integrate various systems consuming or producing data. Camel 是一个开源的集成框架,能够让开发者快速、轻松地整合/集成不同的应…...
2023/3/28 15:33:26 - Java学习记录
阅读前请看一下:我是一个热衷于记录的人,每次写博客会反复研读,尽量不断提升博客质量。文章设置为仅粉丝可见,是因为写博客确实花了不少精力。希望互相进步谢谢!! 文章目录阅读前请看一下:我是一…...
2023/3/28 15:32:34 - 「数据架构」TOGAF建模之数据架构:数据迁移图
数据迁移图的目的是显示从源应用程序到目标应用程序的数据流。该图将提供源/目标分布的可视化表示,并作为数据审核和建立可追溯性的工具。该图可以根据需要进行细化或增强。例如,该图可以只包含迁移环境的总体布局,也可以包含单个应用程序元数…...
2023/3/28 15:29:54 - MySQL数据库之——高级[进阶]SQL语句(一)SQL高级语句、函数等
文章目录一、SQL高级语句1、 SELECT2、DISTINCT3、WHER条件查询4 、AND OR5、IN6、BETWEEN7、通配符8、LIKE9、ORDER BY二、SQL函数1、数学函数:2、聚合函数:3、字符串函数:4、GROUP BY5、HAVING6、别名7、连接查询8、子查询9、EXISTS一、SQL…...
2023/3/28 15:24:30 - Java实现一个简单的东南西北中的面板
目录 一、前言 二、代码部分 1.代码 三、程序运行结果(面板弹出) 四、涉及到的知识点代码 一、前言 1.本代码是我在上学时写的,有一些地方没能完美实现,请包涵也请多赐教! 2.本弹窗界面可以根据简单的要求进行…...
2023/3/28 15:24:15 - 阿里十年资深程序员吐血总结之Java代理模式
阿里十年资深程序员吐血总结之Java代理模式 文章目录阿里十年资深程序员吐血总结之Java代理模式1.接口代理2.类代理3.动态代理都是通过反射实现的吗4.jdk动态代理和cglib动态代理的区别Java代理模式是怎么实现的 Java 代理模式是一种常见的设计模式,它可以在不改变…...
2023/3/28 15:23:34 - ServletAPI详解(一)
目录 1.Tomcat简介 2.Servlet 是什么? 3.编写Servlet 程序步骤 1.创建一个Maven项目 2.引入依赖 3.创建目录 4.编写代码 5.打包程序 6.部署程序 7.验证程序 4.使用SmartTomcat插件部署 1.Tomcat简介 Tomcat是一个开源的,基于java实现的被广泛使用的web服务器.web服…...
2023/3/28 15:22:50 - 全球第三机械制造商徐工集团表示与 Conflux、Zen Spark Technology 建立合作伙伴关系公司
【ConfluxNews】2023.3.28 ----------------------------- 1.【网络状态】当前版本V2.2.2,全网算力≈10T,昨日交易次数58K,昨日新增账户0.69K,昨日新增合约13个; 2.【POS参数】总锁仓244(-3)&a…...
2023/3/28 15:20:26 - 为什么所谓的“自律”一定要跟坚持挂钩呢?懂一点“行为设计学”,升级对“意义”的认知
为什么所谓的“自律”一定要跟坚持挂钩呢?懂一点“行为设计学”,升级对“意义”的认知00 导读01 懂一点“行为设计学”02 升级你对“意义”的认知03 小结00 导读 世界上最成功的人之一,风险投资家雷达利欧(Ray Dalio)…...
2023/3/28 15:19:52 - 中国各省份研究随笔
一.陕西 1.陕北榆林 黄土荒原,萧瑟荒凉,生活艰难,亩产60斤小麦。2002年开始榆林富裕,因为煤炭资源,易开采、质量好 2002年之前煤炭没有人开采,因为价格只有14元一吨,2001年加入WTO࿰…...
2023/3/28 15:19:31 - 配置JRebel热部署
1:此对应设置的是IntelliJ IDEA 2022.1.3 (Ultimate Edition)的热部署设置 2:激活插件失败,提示【LS client not configued】原因是版本过高,解决办法:手动下载jRebel,官网去找到过去版本的jRebel,地址&am…...
2023/3/28 15:16:22 - OpenGL | 渲染带透明通道的2D精灵
一、Alpha测试 Alpha 测试的基本原理为:当绘制一个片元时,首先检测其 Alpha 值,若 Alpha 值满足要求,就通过测试,绘制此片元;否则丢弃此片元,不进行绘制。 glEnable(GL_ALPHA_TEST);…...
2023/3/28 15:15:20 - PCIE中断发送与接收
1. EndPoint模式下中断的发送 在EP模式下,PCIE会根据配置信息只产生MSI或者INTA中断中的一种,然后传送到RC端。 1.1 INTA中断的发送 INTA中断以带内消息(Assert_INTA/Deassert_INTA)的形式传递中断,其作用相当于传统PCI总线中使用边带中断…...
2023/3/28 15:15:04 - SQL Server底层架构技术对比
背景 数据库是信息化的基石,支撑着整个业务系统,发挥着非常重要的作用,被喻为“IT的心脏”。因此,让数据库安全、稳定、高效地运行已经成为IT管理者必须要面对的问题。数据库在底层架构层面需要满足以下几点建设要求: …...
2023/3/28 15:14:36 - 你真的了解变量吗?
变量是编程语言中最基本的术语,用来代指计算机中存放的可变数据——如整数、小数、字符或被调用的一片内存空间。 变量可以保存不同的变量类型,比如整型、布尔型、对象、数组等等,每一个变量在内存中对应着一个内存地址,但是如果…...
2023/3/28 15:13:20 - 一文彻底搞懂为什么OpenCV用GPU/cuda跑得比用CPU慢?
一、原因总结 最近项目需要,发现了这个问题。网上找原因,汇总起来,有以下几点原因: 1、首先对于任何一个CUDA程序,在调用它的第一个CUDA API时后都要花费秒级的时间去初始化运行环境,后续还要分配显存&am…...
2023/3/28 15:11:34 - 数仓必备概念
目录 数据仓库 三范式建模 维度建模 数据仓库 是一个面向主题的(Subject)、集成的(Integrated)、非易失(Non-Volatile)、时变性(Time Variant)的数据集合,用于支持管理…...
2023/3/28 15:09:12 - Spring Security 6.0系列【5】源码篇之认证组件
有道无术,术尚可求,有术无道,止于术。 本系列Spring Boot 版本 3.0.4 本系列Spring Security 版本 6.0.2 源码地址:https://gitee.com/pearl-organization/study-spring-security-demo 文章目录 前言认证机制认证组件SecurityContextHolderSecurityContextAuthentication…...
2023/3/28 15:08:48 - webpack 配置介绍
一、webpack webpack 仅是一个打包工具,不会处理打包过程的东西例如 es6等新特性,如果需要处理这些新特性需要配置单独的加载bebblle-loader 等。 "devDependencies": {"webpack": "^5.76.3", // 打包工具"…...
2023/3/28 15:06:40 - ResNet 基于迁移学习对CIFAR10 数据集的分类
目录 1. resnet 网络 2. 迁移学习-train 2.1 下载预训练权重 2.2 训练过程 2.3 训练损失正确率 2.4 代码 3. resnet 在 CIFAR10 的预测 完整文件下载地址:resnet 基于迁移学习对 CIFAR10 数据集的分类 1. resnet 网络 Resnet 网络的搭建: …...
2023/3/28 15:06:00 - 【Django】基于JWT的token认证
Json Web Token(JWT)这种结构化令牌的基础上实现了一套基于用户体系对用户的API进行授权访问的机制,满足用户个性化安全设置的需求。 文章目录一、基于token的认证1.1 简介1.2 流程描述1.3 JWT1.3.1 简介1.3.2 JWT的构成1.3.3 授权范围与时效…...
2023/3/28 15:05:21 - 零售数据分析之操作篇9:用历史聚合计算历史销售SKU数
各位数据的朋友,大家好,我是老周道数据,和你一起,用常人思维数据分析,通过数据讲故事。 上期内容回顾与作业讲解 上一讲讲了如何通过历史聚合来计算库存,这个方案非常好的解决了零售企业在计算任意时间库…...
2023/3/28 15:01:58 - amd_kernel_code_t Struct Reference——AMD gpu shader kernel 代码数据结构
LLVM: amd_kernel_code_t Struct Reference uint16_twavefront_sgpr_countNumber of scalar registers used by a wavefront.uint16_tworkitem_vgpr_countNumber of vector registers used by each work-item.workitem_vgpr_count: 每个工作线程需要使用的 向量寄存器的个数; …...
2023/3/28 14:59:19
最新文章
- 微信小程序-微信小程序登录流程(一)
微信小程序,小程序的一种,英文名Wechat Mini Program,是一种不需要下载安装即可使用的应用,它实现了应用“触手可及”的梦想,用户扫一扫或搜一下即可打开应用 冷启动: 小程序首次打开或销毁后再次被打开&…...
2023/3/28 15:43:29 - C++初级教程(三)
一、C的一维数组 C 支持数组数据结构,它可以存储一个固定大小的相同类型元素的顺序集合。数组是用来存储一系列数据,但它往往被认为是一系列相同类型的变量。 数组的声明并不是声明一个个单独的变量,而是声明一个数组变量,比如 …...
2023/3/28 15:42:13 - Github上得分最高的20个项目
freeCodeCamp:一个流行的编程教育平台,目标是让任何人都能够免费学习编程。 Vscode:一个流行的跨平台文本编辑器,支持各种语言和框架,可通过扩展进行自定义。 React:一个流行的 JavaScript 库,…...
2023/3/28 15:41:28 - 【java缓存、redis缓存、guava缓存】java中实现缓存的几种方式
一、通过HashMap实现缓存 这种方式可以简单实现本地缓存,但是实际开发中不推荐使用,下面我们来实现一下这种方式。 首先创建一个管理缓存的类 public class LocalCache {public static HashMap<String,String> cache new HashMap<>();sta…...
2023/3/28 15:37:22 - 从应用火到股市 AIGC概念股连涨仨月
AI有变革生产力之势,证券市场闻风而动。同花顺数据显示,AIGC概念指数年内上涨近60%,涨幅是上证指数的10倍多。 具体到个股,软通动力、远大智能等搭上AI风口的企业服务商“老树发新芽”,直接涨停。游戏板块霸榜产品回报…...
2023/3/28 15:37:03 - linux突破git clone下载限制
前言 本人要在linux下载一个2.5G的文件,但只有20kb/s,实在忍受不了,最终利用工具实现了800kb/s的速度,除了利用工具的方法,本人都尝试了,但是几乎没有效果,我也会罗列出来,可自行尝试…...
2023/3/28 15:36:50 - x86架构利用docker去编译arm64的应用程序
文章目录1. 交叉编译:toolchain2. 隔离挂载的方式:3. QEMU 或其他模拟器来实际运行dockerx86架构实现多平台系统代码的编译,实现方式有多种:交叉编译:toolchain 【新的第三方库不好处理】隔离挂载的方式 【速度慢&…...
2023/3/28 15:33:40 - Apache Camel
目录儿一、简介二、核心总结一、简介 Camel is an Open Source integration framework that empowers you to quickly and easily integrate various systems consuming or producing data. Camel 是一个开源的集成框架,能够让开发者快速、轻松地整合/集成不同的应…...
2023/3/28 15:33:26 - Java学习记录
阅读前请看一下:我是一个热衷于记录的人,每次写博客会反复研读,尽量不断提升博客质量。文章设置为仅粉丝可见,是因为写博客确实花了不少精力。希望互相进步谢谢!! 文章目录阅读前请看一下:我是一…...
2023/3/28 15:32:34 - 「数据架构」TOGAF建模之数据架构:数据迁移图
数据迁移图的目的是显示从源应用程序到目标应用程序的数据流。该图将提供源/目标分布的可视化表示,并作为数据审核和建立可追溯性的工具。该图可以根据需要进行细化或增强。例如,该图可以只包含迁移环境的总体布局,也可以包含单个应用程序元数…...
2023/3/28 15:29:54 - MySQL数据库之——高级[进阶]SQL语句(一)SQL高级语句、函数等
文章目录一、SQL高级语句1、 SELECT2、DISTINCT3、WHER条件查询4 、AND OR5、IN6、BETWEEN7、通配符8、LIKE9、ORDER BY二、SQL函数1、数学函数:2、聚合函数:3、字符串函数:4、GROUP BY5、HAVING6、别名7、连接查询8、子查询9、EXISTS一、SQL…...
2023/3/28 15:24:30 - Java实现一个简单的东南西北中的面板
目录 一、前言 二、代码部分 1.代码 三、程序运行结果(面板弹出) 四、涉及到的知识点代码 一、前言 1.本代码是我在上学时写的,有一些地方没能完美实现,请包涵也请多赐教! 2.本弹窗界面可以根据简单的要求进行…...
2023/3/28 15:24:15 - 阿里十年资深程序员吐血总结之Java代理模式
阿里十年资深程序员吐血总结之Java代理模式 文章目录阿里十年资深程序员吐血总结之Java代理模式1.接口代理2.类代理3.动态代理都是通过反射实现的吗4.jdk动态代理和cglib动态代理的区别Java代理模式是怎么实现的 Java 代理模式是一种常见的设计模式,它可以在不改变…...
2023/3/28 15:23:34 - ServletAPI详解(一)
目录 1.Tomcat简介 2.Servlet 是什么? 3.编写Servlet 程序步骤 1.创建一个Maven项目 2.引入依赖 3.创建目录 4.编写代码 5.打包程序 6.部署程序 7.验证程序 4.使用SmartTomcat插件部署 1.Tomcat简介 Tomcat是一个开源的,基于java实现的被广泛使用的web服务器.web服…...
2023/3/28 15:22:50 - 全球第三机械制造商徐工集团表示与 Conflux、Zen Spark Technology 建立合作伙伴关系公司
【ConfluxNews】2023.3.28 ----------------------------- 1.【网络状态】当前版本V2.2.2,全网算力≈10T,昨日交易次数58K,昨日新增账户0.69K,昨日新增合约13个; 2.【POS参数】总锁仓244(-3)&a…...
2023/3/28 15:20:26 - 为什么所谓的“自律”一定要跟坚持挂钩呢?懂一点“行为设计学”,升级对“意义”的认知
为什么所谓的“自律”一定要跟坚持挂钩呢?懂一点“行为设计学”,升级对“意义”的认知00 导读01 懂一点“行为设计学”02 升级你对“意义”的认知03 小结00 导读 世界上最成功的人之一,风险投资家雷达利欧(Ray Dalio)…...
2023/3/28 15:19:52 - 中国各省份研究随笔
一.陕西 1.陕北榆林 黄土荒原,萧瑟荒凉,生活艰难,亩产60斤小麦。2002年开始榆林富裕,因为煤炭资源,易开采、质量好 2002年之前煤炭没有人开采,因为价格只有14元一吨,2001年加入WTO࿰…...
2023/3/28 15:19:31 - 配置JRebel热部署
1:此对应设置的是IntelliJ IDEA 2022.1.3 (Ultimate Edition)的热部署设置 2:激活插件失败,提示【LS client not configued】原因是版本过高,解决办法:手动下载jRebel,官网去找到过去版本的jRebel,地址&am…...
2023/3/28 15:16:22 - OpenGL | 渲染带透明通道的2D精灵
一、Alpha测试 Alpha 测试的基本原理为:当绘制一个片元时,首先检测其 Alpha 值,若 Alpha 值满足要求,就通过测试,绘制此片元;否则丢弃此片元,不进行绘制。 glEnable(GL_ALPHA_TEST);…...
2023/3/28 15:15:20 - PCIE中断发送与接收
1. EndPoint模式下中断的发送 在EP模式下,PCIE会根据配置信息只产生MSI或者INTA中断中的一种,然后传送到RC端。 1.1 INTA中断的发送 INTA中断以带内消息(Assert_INTA/Deassert_INTA)的形式传递中断,其作用相当于传统PCI总线中使用边带中断…...
2023/3/28 15:15:04 - SQL Server底层架构技术对比
背景 数据库是信息化的基石,支撑着整个业务系统,发挥着非常重要的作用,被喻为“IT的心脏”。因此,让数据库安全、稳定、高效地运行已经成为IT管理者必须要面对的问题。数据库在底层架构层面需要满足以下几点建设要求: …...
2023/3/28 15:14:36 - 你真的了解变量吗?
变量是编程语言中最基本的术语,用来代指计算机中存放的可变数据——如整数、小数、字符或被调用的一片内存空间。 变量可以保存不同的变量类型,比如整型、布尔型、对象、数组等等,每一个变量在内存中对应着一个内存地址,但是如果…...
2023/3/28 15:13:20 - 一文彻底搞懂为什么OpenCV用GPU/cuda跑得比用CPU慢?
一、原因总结 最近项目需要,发现了这个问题。网上找原因,汇总起来,有以下几点原因: 1、首先对于任何一个CUDA程序,在调用它的第一个CUDA API时后都要花费秒级的时间去初始化运行环境,后续还要分配显存&am…...
2023/3/28 15:11:34 - 数仓必备概念
目录 数据仓库 三范式建模 维度建模 数据仓库 是一个面向主题的(Subject)、集成的(Integrated)、非易失(Non-Volatile)、时变性(Time Variant)的数据集合,用于支持管理…...
2023/3/28 15:09:12 - Spring Security 6.0系列【5】源码篇之认证组件
有道无术,术尚可求,有术无道,止于术。 本系列Spring Boot 版本 3.0.4 本系列Spring Security 版本 6.0.2 源码地址:https://gitee.com/pearl-organization/study-spring-security-demo 文章目录 前言认证机制认证组件SecurityContextHolderSecurityContextAuthentication…...
2023/3/28 15:08:48 - webpack 配置介绍
一、webpack webpack 仅是一个打包工具,不会处理打包过程的东西例如 es6等新特性,如果需要处理这些新特性需要配置单独的加载bebblle-loader 等。 "devDependencies": {"webpack": "^5.76.3", // 打包工具"…...
2023/3/28 15:06:40 - ResNet 基于迁移学习对CIFAR10 数据集的分类
目录 1. resnet 网络 2. 迁移学习-train 2.1 下载预训练权重 2.2 训练过程 2.3 训练损失正确率 2.4 代码 3. resnet 在 CIFAR10 的预测 完整文件下载地址:resnet 基于迁移学习对 CIFAR10 数据集的分类 1. resnet 网络 Resnet 网络的搭建: …...
2023/3/28 15:06:00 - 【Django】基于JWT的token认证
Json Web Token(JWT)这种结构化令牌的基础上实现了一套基于用户体系对用户的API进行授权访问的机制,满足用户个性化安全设置的需求。 文章目录一、基于token的认证1.1 简介1.2 流程描述1.3 JWT1.3.1 简介1.3.2 JWT的构成1.3.3 授权范围与时效…...
2023/3/28 15:05:21 - 零售数据分析之操作篇9:用历史聚合计算历史销售SKU数
各位数据的朋友,大家好,我是老周道数据,和你一起,用常人思维数据分析,通过数据讲故事。 上期内容回顾与作业讲解 上一讲讲了如何通过历史聚合来计算库存,这个方案非常好的解决了零售企业在计算任意时间库…...
2023/3/28 15:01:58 - amd_kernel_code_t Struct Reference——AMD gpu shader kernel 代码数据结构
LLVM: amd_kernel_code_t Struct Reference uint16_twavefront_sgpr_countNumber of scalar registers used by a wavefront.uint16_tworkitem_vgpr_countNumber of vector registers used by each work-item.workitem_vgpr_count: 每个工作线程需要使用的 向量寄存器的个数; …...
2023/3/28 14:59:19