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

C++迈向精通:函数指针对象与函数对象

C++:指针对象

C语言中的函数指针

在C语言中,我们见过如下的函数指针:

int add(int a, int b) {return a + b;
}int main() {int a, b;int (*p)(int, int) = add;scanf("%d%d", &a, &b);p(a, b);return 0;
} 

为了适应C++中面向对象的特性,出现了一个新的对象叫做函数指针对象。

C++中的函数指针对象

C++中的函数对象

在C++中有一类对象本质上是一个对象,但是表现的像个函数:

class Func_add {
public:int operator+()(int a, int b) {return a + b;}
};int main() {Func_add add; // 需要先定义一个函数对象int a , int b;cin >> a >> b;cout << "a + b = " << add(a, b) << endl;return 0;
}

既然有函数对象,可以猜到C语言中的函数指针肯定不能不能指向C++中的函数对象,因此诞生出了函数指针对象,既能够满足原生C语言中的函数指针的要求,也能满足C++中函数对象的要求:


#include <iostream>
#include <algorithm>
#include <vector>
#include <queue>
#include <stack>
#include <set>
#include <map>
#include <cstdio>
#include <cstdlib>
#include <ctype.h>
#include <cmath>
#include <string>
#include <sstream>
#include <functional>#define TEST_BEGINS(x) namespace x {
#define TEST_ENDS(x) } // end of namespace x
using namespace std;int add(int a, int b) {return a + b;
}class func{
public:int operator()(int a, int b) {return a + b;}};int main() {int a, b;func func_add;cin >> a >> b;function<int(int, int)> q;q = add;cout << q(a, b) << endl;q = func_add;cout << q(a, b) << endl;return 0;
}

可以看出函数对象都能执行成功。

函数指针对象的用法

很简单,你可以将他当成一个指针来使用,包括赋值一系列操作。

functional<int(int ,int)> q; // 定义了一个具有两个参数int和一个int返回值的函数指针对象;
functional<float(int, float)> p; // 定义了两个传入参数类型分别是 int 和 float 类型,返回值类型是float类型的函数指针对象

C++_STL中的函数对象

那么C++中有什么函数对象呢?其中最为常用的大概就是greater了,他常常在sort函数的排序中作为第三个参数来使用:

srand(time(0));
vector<int> a;
for (int i = 0; i < 100; ++i) {a.push_back(rand() % 100);
}
sort(a.begin(), a.end(), greater<int>());

事实上,这个对象是被当作一个比较方法来使用的。

greater复现

我们可以尝试写一下greater的代码:


TEST_BEGINS(my)
template <typename T>
class greater {
public:bool operator()(T a, T b) {if (a > b) return true;else return false;}
};
TEST_ENDS(my)

只要是能够使用比较运算符的对象就可以使用该比较方法。

相关文章:

C++迈向精通:函数指针对象与函数对象

C&#xff1a;指针对象 C语言中的函数指针 在C语言中&#xff0c;我们见过如下的函数指针&#xff1a; int add(int a, int b) {return a b; }int main() {int a, b;int (*p)(int, int) add;scanf("%d%d", &a, &b);p(a, b);return 0; } 为了适应C中面向…...

类和对象知识点

面向对象概念回顾 万物皆对象 用程序来抽象&#xff08;形容&#xff09;对象 用面向对象的思想来编程 什么是类 基本概念 具有相同特征&#xff0c;具有相同行为&#xff0c;一类事物的抽象。 类是对象的模板&#xff0c;可以通过类创建出对象&#xff0c;类的关键词—…...

【FAS】《Survey on face anti-spoofing in face recognition》

文章目录 原文基于手工设计特征表达的人脸活体检测方法基于深度学习的人脸活体检测方法基于融合策略的人脸活体检测方法人脸检测活体数据库点评 原文 邓雄,王洪春,赵立军等.人脸识别活体检测研究方法综述[J].计算机应用研究,2020,37(09):2579-2585.DOI:10.19734/j.issn.1001-3…...

【Unity】RPG2D龙城纷争(一)搭建项目、导入框架、前期开发准备

更新日期&#xff1a;2024年6月12日。 项目源码&#xff1a;后续章节发布 免责声明&#xff1a;【RPG2D龙城纷争】使用的图片、音频等所有素材均有可能来自互联网&#xff0c;本专栏所有文章仅做学习和教程目的&#xff0c;不会将任何素材用于任何商业用途。 索引 【系列简介】…...

多目标跟踪中检测器和跟踪器如何协同工作的

多目标跟踪中检测器和跟踪器如何协同工作的 flyfish 主要是两者 接口间的交互 假设 原始图像尺寸&#xff1a;1920&#xff08;宽&#xff09;x 1080&#xff08;高&#xff09; 模型输入尺寸&#xff1a;640&#xff08;宽&#xff09;x 640&#xff08;高&#xff09; 检…...

kali系统几个开机启动项的区别

1、Live system (amd64) 简单的模式 &#xff0c;启动系统&#xff0c;直接进入 Kali&#xff0c;在系统中的所有的操作和设置都会在下次重启时失效。 Kali 中保存/编辑的所有东西都会重启丢失。 2、Live system (amd64 fail-safe mode) 这种模式与 Live (amd64) 类似&#xf…...

【自撰写】【国际象棋入门】第5课 常见开局战术组合(一)

第5课 常见开局战术组合&#xff08;一&#xff09; 本次课中&#xff0c;我们简要介绍几种常见的开局战术组合。开局当中&#xff0c;理想的情况是&#xff0c;己方的两只&#xff08;或以上&#xff09;轻子相互配合&#xff0c;或者与己方的兵配合&#xff0c;在完成布局的…...

高考志愿填报选专业,女孩就业率最好的专业有哪些?

高考志愿填报选专业&#xff0c; 大家都会关心&#xff1a;将来怎么就业&#xff1f; 按照目前的环境来说&#xff0c;女孩的就业是不乐观的&#xff0c;在职场上&#xff0c;绝大部分岗位都是男性优先的&#xff0c;至少短期内可能还无法改变&#xff0c;这样就要求我们在大学…...

yolov5模型训练早停模型变大

目录 1. 背景2. 原因分析2.1 train代码分析2.2 strip_optimizer函数分析 3. 验证 1. 背景 最近使用tph-yolov5训练yolov5l-tph-plus模型时&#xff0c;发现模型收敛的差不多了&#xff0c;就果断的停止了训练&#xff0c;结果发现last.pt和best.pt竟然488M&#xff0c;而正常训…...

next是什么???

大家都知道最近出了一个很火的框架&#xff0c;Next.js框架。很多大公司&#xff08;例如&#xff1a;Tencent腾讯&#xff0c;docker&#xff0c;Uber&#xff09;的项目都在使用这个Next.js框架。那Next.js到底是一个什么框架呢&#xff1f;Next.js有什么优点呢&#xff1f;今…...

K8s的资源对象

资源对象是 K8s 提供的一些管理和运行应用容器的各种对象和组件。 Pod 资源是 K8s 中的基本部署单元&#xff0c;K8s通过Pod来运行业务应用的容器镜像 Job 和 CronJob 资源用于执行任务和定时任务&#xff0c;DaemonSet 资源提供类似每个节点上守护进程&#xff0c; Deployment…...

OpenStack快速入门

任务一 熟悉OpenStack图形界面操作 1.1 Horizon项目 •各OpenStack服务的图形界面都是由Horizon提供的。 •Horizon提供基于Web的模块化用户界面。 •Horizon为云管理员提供一个整体的视图。 •Horizon为终端用户提供一个自主服务的门户。 •Horizon由云管理员进行管理…...

STM32CubeIDE对STM32F072进行ADC配置及使用

目录 1. 配置2. 时钟3. ADC配置4. 代码补充 1. 配置 引脚配置&#xff1a;PB0 2. 时钟 都是48MHz 3. ADC配置 ADC配置&#xff1a; 开启中断&#xff1a; 4. 代码补充 轮训ADC采样&#xff1a; HAL_ADC_PollForConversion(&hadc,10);ADC采样&#xff1a; HAL_ADC_Start (&a…...

Leetcode Hot 100 刷题记录 - Day 1

问题描述&#xff1a; 给定一个整数数组 nums 和一个整数目标值 target&#xff0c;请你在该数组中找出 和为目标值 target 的那 两个整数&#xff0c;并返回它们的数组下标。 你可以假设每种输入只会对应一个答案。但是&#xff0c;数组中同一个元素在答案里不能重复出现。 示…...

k8s学习--Kruise Rollouts 基本使用

文章目录 Kruise Rollouts简介什么是 Kruise Rollouts&#xff1f;核心功能 应用环境一、OpenKruise部署1.安装helm客户端工具2. 通过 helm 安装 二、Kruise Rollouts 安装2. kubectl plugin安装 三、Kruise Rollouts 基本使用(多批次发布)1. 使用Deployment部署应用2.准备Roll…...

PHP框架详解 - CakePHP框架

CakePHP 是一个开源的 PHP Web 应用框架&#xff0c;它遵循 MVC&#xff08;模型-视图-控制器&#xff09;设计模式。CakePHP 提供了快速开发的功能&#xff0c;如代码自动生成、数据库交互的 CRUD 操作支持、灵活的路由、模板引擎、表单处理以及其它许多有用的特性22。 CakeP…...

el-cascader 支持多层级,多选(可自定义限制数量),保留最后一级

多功能的 el-cascader 序言&#xff1a;最近遇到一个需求关于级联的&#xff0c;有点东西&#xff0c;这里是要获取某个产品类型下的产品&#xff0c;会存在产品类型和产品在同一级的情况&#xff0c;但是产品类型不能勾选&#xff1b; 情况1&#xff08;二级菜单是产品&…...

leetcode498 对角线遍历

题目 给你一个大小为 m x n 的矩阵 mat &#xff0c;请以对角线遍历的顺序&#xff0c;用一个数组返回这个矩阵中的所有元素。 示例 输入&#xff1a;mat [[1,2,3],[4,5,6],[7,8,9]] 输出&#xff1a;[1,2,4,7,5,3,6,8,9] 解析 本题目主要考察的就是模拟法&#xff0c;首…...

北京活动会议通常会邀约哪些媒体参会报道?

传媒如春雨&#xff0c;润物细无声&#xff0c;大家好&#xff0c;我是51媒体网胡老师。 北京作为我国的首都和文化中心&#xff0c;各类活动会议资源丰富&#xff0c;吸引了众多媒体的关注。以下是一些通常会被邀约参会报道的重要媒体类型&#xff1a; 国家级新闻机构&#x…...

随心笔记,第六更

目录 一、 三步构建 XML转成java bean 1.XML转XSD 2.XSD转JavaBean 3.jaxb 工具类 4.测试 &#x1f4e2;&#x1f4e2;&#x1f4e2;&#x1f4e3;&#x1f4e3;&#x1f4e3; 哈喽&#xff01;大家好&#xff0c;我是「Leen」。刚工作几年&#xff0c;想和大家一同进步&am…...

大数据学习栈记——Neo4j的安装与使用

本文介绍图数据库Neofj的安装与使用&#xff0c;操作系统&#xff1a;Ubuntu24.04&#xff0c;Neofj版本&#xff1a;2025.04.0。 Apt安装 Neofj可以进行官网安装&#xff1a;Neo4j Deployment Center - Graph Database & Analytics 我这里安装是添加软件源的方法 最新版…...

CVPR 2025 MIMO: 支持视觉指代和像素grounding 的医学视觉语言模型

CVPR 2025 | MIMO&#xff1a;支持视觉指代和像素对齐的医学视觉语言模型 论文信息 标题&#xff1a;MIMO: A medical vision language model with visual referring multimodal input and pixel grounding multimodal output作者&#xff1a;Yanyuan Chen, Dexuan Xu, Yu Hu…...

反向工程与模型迁移:打造未来商品详情API的可持续创新体系

在电商行业蓬勃发展的当下&#xff0c;商品详情API作为连接电商平台与开发者、商家及用户的关键纽带&#xff0c;其重要性日益凸显。传统商品详情API主要聚焦于商品基本信息&#xff08;如名称、价格、库存等&#xff09;的获取与展示&#xff0c;已难以满足市场对个性化、智能…...

Debian系统简介

目录 Debian系统介绍 Debian版本介绍 Debian软件源介绍 软件包管理工具dpkg dpkg核心指令详解 安装软件包 卸载软件包 查询软件包状态 验证软件包完整性 手动处理依赖关系 dpkg vs apt Debian系统介绍 Debian 和 Ubuntu 都是基于 Debian内核 的 Linux 发行版&#xff…...

解锁数据库简洁之道:FastAPI与SQLModel实战指南

在构建现代Web应用程序时&#xff0c;与数据库的交互无疑是核心环节。虽然传统的数据库操作方式&#xff08;如直接编写SQL语句与psycopg2交互&#xff09;赋予了我们精细的控制权&#xff0c;但在面对日益复杂的业务逻辑和快速迭代的需求时&#xff0c;这种方式的开发效率和可…...

DBAPI如何优雅的获取单条数据

API如何优雅的获取单条数据 案例一 对于查询类API&#xff0c;查询的是单条数据&#xff0c;比如根据主键ID查询用户信息&#xff0c;sql如下&#xff1a; select id, name, age from user where id #{id}API默认返回的数据格式是多条的&#xff0c;如下&#xff1a; {&qu…...

AirSim/Cosys-AirSim 游戏开发(四)外部固定位置监控相机

这个博客介绍了如何通过 settings.json 文件添加一个无人机外的 固定位置监控相机&#xff0c;因为在使用过程中发现 Airsim 对外部监控相机的描述模糊&#xff0c;而 Cosys-Airsim 在官方文档中没有提供外部监控相机设置&#xff0c;最后在源码示例中找到了&#xff0c;所以感…...

[免费]微信小程序问卷调查系统(SpringBoot后端+Vue管理端)【论文+源码+SQL脚本】

大家好&#xff0c;我是java1234_小锋老师&#xff0c;看到一个不错的微信小程序问卷调查系统(SpringBoot后端Vue管理端)【论文源码SQL脚本】&#xff0c;分享下哈。 项目视频演示 【免费】微信小程序问卷调查系统(SpringBoot后端Vue管理端) Java毕业设计_哔哩哔哩_bilibili 项…...

【安全篇】金刚不坏之身:整合 Spring Security + JWT 实现无状态认证与授权

摘要 本文是《Spring Boot 实战派》系列的第四篇。我们将直面所有 Web 应用都无法回避的核心问题&#xff1a;安全。文章将详细阐述认证&#xff08;Authentication) 与授权&#xff08;Authorization的核心概念&#xff0c;对比传统 Session-Cookie 与现代 JWT&#xff08;JS…...

Kubernetes 节点自动伸缩(Cluster Autoscaler)原理与实践

在 Kubernetes 集群中&#xff0c;如何在保障应用高可用的同时有效地管理资源&#xff0c;一直是运维人员和开发者关注的重点。随着微服务架构的普及&#xff0c;集群内各个服务的负载波动日趋明显&#xff0c;传统的手动扩缩容方式已无法满足实时性和弹性需求。 Cluster Auto…...