# C++之functional库用法整理

news2024/11/13 8:04:50

C++之functional库用法整理

注:整理一些突然学到的C++知识,随时mark一下
例如:忘记的关键字用法,新关键字,新数据结构


C++ 的function库用法整理

  • C++之functional库用法整理
  • 一、functional库的内建仿函数
    • 1. 存储和调用函数
    • 2. 存储和调用 lambda 表达式
    • 3. 作为函数参数和返回值
    • 4. 可绑定到成员函数和带参数的函数
  • 总结


提示:本文为 C++ 中functional的写法和举例


一、functional库的内建仿函数

  std::function 是 C++11 标准库中的一个通用、多态的函数封装器。它可以保存、复制和调用任何可调用目标 — 函数、lambda 表达式或其他函数对象,且作为函数的类型擦除手段。下面是 std::function 的一些常用用法:

1. 存储和调用函数

你可以使用 std::function 来存储一个函数,并在需要时调用它。

#include <iostream>
#include <functional>

void printHello() {
    std::cout << "Hello, World!" << std::endl;
}

int main() {
    std::function<void()> func = printHello;
    func();  // 输出 "Hello, World!"
    return 0;
}

2. 存储和调用 lambda 表达式

std::function 也可以用来存储和调用 lambda 表达式。

#include <iostream>
#include <functional>

int main() {
    std::function<void()> func = []() {
        std::cout << "Lambda expression called!" << std::endl;
    };
    func();  // 输出 "Lambda expression called!"
    return 0;
}

3. 作为函数参数和返回值

你可以将 std::function 用作函数的参数或返回值,实现更灵活的函数接口。

#include <iostream>
#include <functional>

void callFunction(std::function<void()> func) {
    func();
}

std::function<void()> createFunction() {
    return []() {
        std::cout << "Function created and called!" << std::endl;
    };
}

int main() {
    callFunction(createFunction());  // 输出 "Function created and called!"
    return 0;
}

4. 可绑定到成员函数和带参数的函数

std::function 也可以绑定到类的成员函数或带参数的函数。

#include <iostream>
#include <functional>

class MyClass {
public:
    void printMessage(const std::string& msg) {
        std::cout << msg << std::endl;
    }
};

int main() {
    MyClass obj;
    std::function<void(const std::string&)> func = std::bind(&MyClass::printMessage, &obj, std::placeholders::_1);
    func("Bound member function called!");  // 输出 "Bound member function called!"
    return 0;
}

注意事项
std::function 通常比裸函数指针或函数对象占用更多的内存,因为它需要在内部存储关于所保存函数类型的信息。
std::function 可以存储任何可调用对象,这包括函数、函数对象、lambda 表达式等。但是,它不能存储指向非静态成员函数的指针,除非与 std::bind 或 lambda 表达式结合使用。

总结

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1575554.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Matlab应用层生成简述

基础软件层 目前接触到的几款控制器&#xff0c;其厂商并没有提供simulink的基础软件库一般为底层文件被封装为lib&#xff0c;留有供调用API接口虽然能根据API接口开发基础软件库&#xff0c;但耗费时间过长得不偿失 应用层 所以可以将应用层封装为一个子系统&#xff0c;其…

6轮面试辛苦拿到阿里Android开发offer,却从22k降到15k,在逗我?(2)

一般来说我会这样建议别人写简历&#xff1a; 全文杜绝任何的精通字眼&#xff0c;如果你真的精通&#xff0c;不需要投简历找工作了。 简历控制在两页左右&#xff0c;不需要找什么简历模板&#xff0c;直接 Markdown 生成 PDF 文件&#xff0c;面试官不在意你的简历有多好看…

【MacBook系统homebrew镜像记录】

安装 使用Homebrew 国内源安装脚本,贼方便&#xff1a; /bin/zsh -c "$(curl -fsSL https://gitee.com/cunkai/HomebrewCN/raw/master/Homebrew.sh)"切换至清华大学镜像源&#xff1a; 命令合并&#xff1a; 分别切换了 brew.git、 homebrew-core.git、 homebrew-…

docker安装jenkins 2024版

docker 指令安装安装 docker run -d --restartalways \ --name jenkins -uroot -p 10340:8080 \ -p 10341:50000 \ -v /home/docker/jenkins:/var/jenkins_home \ -v /var/run/docker.sock:/var/run/docker.sock \ -v /usr/bin/docker:/usr/bin/docker jenkins/jenkins:lts访问…

sharo反序列化漏洞

启动docker 服务 sudo service docker start 打开靶场 sudo docker run -d -p 80:8080 medicean/vulapps:s_shiro_1 输入docker虚拟机地址打开靶机sharo框架 如何利用漏洞 打开工具目录在终端中打开 输入靶机地址 打开yaki监听端口可以设置为6666 返回工具填写靶机ip和端口 …

树莓派5使用体验

原文地址&#xff1a;树莓派5使用体验 - Pleasure的博客 下面是正文内容&#xff1a; 前言 好久没有关于教程方面的博文了&#xff0c;由于最近打算入门嵌入式系统&#xff0c;所以就去购入了树莓派5开发板 树莓派5是2023年10月23日正式发售的&#xff0c;过去的时间不算太远吧…

【前沿模型解析】潜在扩散模型 2-1 | 手撕感知图像压缩 基础块ResNet块

文章目录 1 残差结构回顾2 LDM结构中的残差结构设计2.1 组归一化GroupNorm层2.2 激活函数层2.3 卷积层2.4 dropout层 3 代码实现 1 残差结构回顾 残差结构应该是非常重要的基础块之一了&#xff0c;你肯定会在各种各样的网络模型结构里看到残差结构&#xff0c;他是非常强大的…

【绘图案例-模拟ImageView Objective-C语言】

一、接下来,我们来模拟一下imageView, 1.我们先来写一段儿简单的代码,然后我们再来说怎么着去做啊, 首先呢,imageView啊,它初始化,有两个方法: 1)init: 2)initWithImage: 这两个方法,有什么样儿的区别呢,知道吗,除了默认带不带图片以外,还有没有其他的区别…

C语言进阶课程学习记录-第25课 - # 和 ## 操作符使用分析

C语言进阶课程学习记录-第25课 - # 和 ## 操作符使用分析 #运算符实验-#转化字符串预处理后代码 实验-#输出函数名预处理后的代码 ##运算符实验-##定义变量预处理后代码 实验-##定义结构体预处理后的代码 小结 本文学习自狄泰软件学院 唐佐林老师的 C语言进阶课程&#xff0c;图…

linux基础篇:linux挂载本地yum源——centos7.9为例

linux挂载本地yum源——centos7.9为例 一、Linux本地yum源介绍 Linux本地YUM源是一个本地存储的软件包仓库&#xff0c;它允许用户在不连接互联网的情况下安装、更新和管理软件包。本地YUM源可以提高软件包安装速度&#xff0c;降低网络带宽消耗&#xff0c;并提高软件包管理…

C语言程序与设计——指针地址与main函数

指针变量 在C语言中&#xff0c;最重要的就是对于指针和地址的理解&#xff0c;因为C语言是更接近底层的编程语言&#xff0c;所以它可以允许开发者对内存操作&#xff0c;这也是区别于其它编程语言的一个重要特性。 如何对内存进行操作呢。我们知道在编程过程中&#xff0c;在…

软件设计师:11-结构化开发与UML

结构化开发&#xff08;3-4分&#xff09; 一、模块化 二、耦合&#xff08;背&#xff09; 三、内聚&#xff08;背&#xff09; 四、设计原则&#xff08;背&#xff09; 五、系统文档 六、数据流图 数据流的起点或终点必须有一个是加工 判断依据&#xff1a; 1、…

CTF之GET和POST

学过php都知道就一个简单传参&#xff0c;构造payload:?whatflag得到 flag{3121064b1e9e27280f9f709144222429} 下面是POST那题 使用firefox浏览器的插件Hackbar勾选POST传入whatflag flag{828a91acc006990d74b0cb0c2f62b8d8}

【TI毫米波雷达】官方工业雷达包的生命体征检测环境配置及避坑(Vital_Signs、IWR6843AOPEVM)

【TI毫米波雷达】官方工业雷达包的生命体征检测环境配置及避坑&#xff08;Vital_Signs、IWR6843AOPEVM&#xff09; 文章目录 生命体征基本介绍IWR6843AOPEVM的配置上位机配置文件避坑上位机start测试距离检测心跳检测呼吸频率检测空环境测试 附录&#xff1a;结构框架雷达基…

js,uniapp,vue,小写数字转化为大写

应用场景&#xff1a; 把1、2、3&#xff0c;转为一、二、三 方法&#xff1a; retBigSrt(num) {const changeNum [零, 一, 二, 三, 四, 五, 六, 七, 八, 九]const unit [, 十, 百]num parseInt(num)const getWan (temp) > {const strArr temp.toString().split().re…

Github项目推荐-ChatGPT-Admin-Web

项目地址 https://github.com/AprilNEA/ChatGPT-Admin-Web 项目简介 通过api接入大模型&#xff0c;并基于此封装了一层用户管理的功能&#xff0c;适合团队内使用。 项目截图

瑞吉外卖实战学习-17、用户地址簿相关功能

用户地址簿相关功能 效果图1、根据规则创建相关文件2、新增收货地址接口3、列表查询页面以及设置默认地址 效果图 1、根据规则创建相关文件 2、新增收货地址接口 获取到传入的数据然后将id添加进去&#xff0c;然后存储到数据库 3、列表查询页面以及设置默认地址 list接口&am…

C顺序表:通讯录

目录 前言 通讯录数据结构 通讯录初始化 查找名字 增加联系人 删除联系人 展示所有联系人 查找联系人 修改信息 销毁通讯录 完整通讯录代码 前言 数据结构中的顺序表如果已经学会了&#xff0c;那么我们就可以基于顺序表来完成一个通讯录了 通讯录其实我们使用前…

1.0-spring入门

文章目录 前言一、版本要求二、第一个spring程序1.引入pom2.代码部分2.1 spring bean2.2 springContext.xml2.3 测试2.4 执行结果 总结 前言 最近想要系统的学习下spring相关的框架,于是乎,来到了B站(真是个好地方),spring会专门开一个专栏出来,记录学习心得,与大家共勉。 Spri…

[每天一道面试题] HTTP,FTP,TFTP的底层实现协议是什么

HTTP、FTP和TFTP等这些协议都是属于互联网协议网络层模型中的应用层协议。它们的底层实现主要依赖于传输层的两种协议—— TCP(传输控制协议) 和 UDP(用户数据报协议)。 HTTP: 超文本传输协议(HTTP)通常在TCP协议的基础上操作。HTTP用于在网络上传输超文本&#xff0c;是万维网…