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

# C++之functional库用法整理

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 表达式结合使用。

总结

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • spring 和spring boot的区别
  • swiftUI macOS使用webview加载外部网址
  • 2024年最新社交相亲系统源码下载
  • Bilstm双向长短期神经网络多输入单输出回归分析
  • ddres( ) 组站星双差方程和设计矩阵
  • redis 集群模式(redis cluster)介绍
  • 数据结构:构建完全二叉查找树
  • c++的学习之路:17、stack、queue与priority_queue
  • 零售EDI:Princess Auto EDI对接
  • 远程桌面无法连接怎么办?
  • 2024HW --->反序列化漏洞!
  • 算法练习第四十五天|279. 完全平方数、322. 零钱兑换、爬楼梯(进阶版)
  • 物联网数据服务平台
  • spa、vue、elementUi
  • 开源免费的多功能PDF工具箱
  • [译] 怎样写一个基础的编译器
  • 5分钟即可掌握的前端高效利器:JavaScript 策略模式
  • exif信息对照
  • gcc介绍及安装
  • overflow: hidden IE7无效
  • Python 反序列化安全问题(二)
  • sublime配置文件
  • vue--为什么data属性必须是一个函数
  • 表单中readonly的input等标签,禁止光标进入(focus)的几种方式
  • 从地狱到天堂,Node 回调向 async/await 转变
  • 第13期 DApp 榜单 :来,吃我这波安利
  • 关于extract.autodesk.io的一些说明
  • 官方解决所有 npm 全局安装权限问题
  • 基于游标的分页接口实现
  • 排序算法学习笔记
  • 网络应用优化——时延与带宽
  • 微信开放平台全网发布【失败】的几点排查方法
  • 项目实战-Api的解决方案
  • 一起来学SpringBoot | 第三篇:SpringBoot日志配置
  • media数据库操作,可以进行增删改查,实现回收站,隐私照片功能 SharedPreferences存储地址:
  • 浅谈sql中的in与not in,exists与not exists的区别
  • ​VRRP 虚拟路由冗余协议(华为)
  • ​云纳万物 · 数皆有言|2021 七牛云战略发布会启幕,邀您赴约
  • $.ajax()
  • $.type 怎么精确判断对象类型的 --(源码学习2)
  • %3cli%3e连接html页面,html+canvas实现屏幕截取
  • (PHP)设置修改 Apache 文件根目录 (Document Root)(转帖)
  • (超简单)使用vuepress搭建自己的博客并部署到github pages上
  • (定时器/计数器)中断系统(详解与使用)
  • (二)Eureka服务搭建,服务注册,服务发现
  • (附源码)ssm高校运动会管理系统 毕业设计 020419
  • (回溯) LeetCode 77. 组合
  • (论文阅读笔记)Network planning with deep reinforcement learning
  • (十一)手动添加用户和文件的特殊权限
  • (一)模式识别——基于SVM的道路分割实验(附资源)
  • (转载)(官方)UE4--图像编程----着色器开发
  • ../depcomp: line 571: exec: g++: not found
  • .gitignore不生效的解决方案
  • .net core + vue 搭建前后端分离的框架
  • .NET MVC 验证码