当前位置: 首页 > 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工具箱
  • Apache Zeppelin在Apache Trafodion上的可视化
  • Java多线程(4):使用线程池执行定时任务
  • node-glob通配符
  • PHP变量
  • php中curl和soap方式请求服务超时问题
  • Python3爬取英雄联盟英雄皮肤大图
  • SegmentFault 2015 Top Rank
  • 双管齐下,VMware的容器新战略
  • nb
  • 【干货分享】dos命令大全
  • CMake 入门1/5:基于阿里云 ECS搭建体验环境
  • Semaphore
  • 摩拜创始人胡玮炜也彻底离开了,共享单车行业还有未来吗? ...
  • ​猴子吃桃问题:每天都吃了前一天剩下的一半多一个。
  • #WEB前端(HTML属性)
  • #我与Java虚拟机的故事#连载09:面试大厂逃不过的JVM
  • $().each和$.each的区别
  • $redis-setphp_redis Set命令,php操作Redis Set函数介绍
  • (7)svelte 教程: Props(属性)
  • (delphi11最新学习资料) Object Pascal 学习笔记---第8章第5节(封闭类和Final方法)
  • (定时器/计数器)中断系统(详解与使用)
  • (算法)前K大的和
  • (已解决)报错:Could not load the Qt platform plugin “xcb“
  • (转)【Hibernate总结系列】使用举例
  • (转)Mysql的优化设置
  • (转)使用VMware vSphere标准交换机设置网络连接
  • (转)总结使用Unity 3D优化游戏运行性能的经验
  • (轉貼) 2008 Altera 亞洲創新大賽 台灣學生成果傲視全球 [照片花絮] (SOC) (News)
  • .net framework 4.0中如何 输出 form 的name属性。
  • .NET 常见的偏门问题
  • .NET开发者必备的11款免费工具
  • @Import注解详解
  • [<事务专题>]
  • [20171106]配置客户端连接注意.txt
  • [3300万人的聊天室] 作为产品的上游公司该如何?
  • [APUE]进程关系(下)
  • [BSGS算法]纯水斐波那契数列
  • [C++从入门到精通] 14.虚函数、纯虚函数和虚析构(virtual)
  • [Cesium学习]
  • [HeMIM]Cl,[AeMIM]Br,[CeEIM]Cl,([HO-PECH-MIM]Cl,[HOOC-PECH-MIM]Cl改性酚醛树脂