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

std::function的概念和使用方法

一、概念

std::function是 C++ 标准库中的一个模板类,定义在<functional>头文件中。它是一种通用的多态函数包装器,其实例能够对任何可调用对象进行存储、复制和调用操作,这些可调用对象包括普通函数、函数指针、成员函数指针、函数对象(仿函数)等,从而可以统一处理不同类型的可调用实体。

二、使用方法

1. 包含头文件

   #include <functional>

2. 包装普通函数

   #include <iostream>#include <functional>int add(int a, int b) {return a + b;}int main() {std::function<int(int, int)> func = add;int result = func(3, 4);std::cout << "Result: " << result << std::endl;return 0;}

3. 包装函数对象(仿函数)

   #include <iostream>#include <functional>struct Multiply {int operator()(int a, int b) const {return a * b;}};int main() {Multiply multiplyObj;std::function<int(int, int)> func = multiplyObj;int result = func(3, 4);std::cout << "Result: " << result << std::endl;return 0;}

4. 包装成员函数

   #include <iostream>#include <functional>class MyClass {public:int add(int a, int b) {return a + b;}};int main() {MyClass obj;std::function<int(MyClass*, int, int)> func = &MyClass::add;int result = func(&obj, 3, 4);std::cout << "Result: " << result << std::endl;return 0;}

5. 在容器中存储不同类型的可调用对象

   #include <iostream>#include <vector>#include <functional>int add(int a, int b) {return a + b;}struct Subtract {int operator()(int a, int b) const {return a - b;}};int main() {std::vector<std::function<int(int, int)>> funcs;funcs.push_back(add);funcs.push_back(Subtract());for (const auto& func : funcs) {int result = func(5, 3);std::cout << "Result: " << result << std::endl;}return 0;}

std::function使得代码更加灵活和可维护,它允许在运行时根据需要切换不同的可调用对象,而无需修改大量的代码。


http://www.mrgr.cn/news/51071.html

相关文章:

  • 卡尔曼滤波(Kalman Filter)MATLAB代码
  • Codeforces Round 978 (Div. 2) C. Gerrymandering
  • Go语言基础学习(Go安装配置、基础语法)
  • 【AI论文精读5】知识图谱与LLM结合的路线图-P2
  • OpenAI 公布了其新 o1 模型家族的元提示(meta-prompt)
  • 38. 外观数列
  • Python机器学习数据清洗到特征工程策略
  • K8s的储存
  • 音视频入门基础:FLV专题(15)——Video Tag简介
  • Vue中计算属性computed—(详解计算属性vs方法Methods,包括案例+代码)
  • (三)Python变量
  • python 位运算 笔记
  • SpringTask的学习
  • 高阶数据结构与算法——红黑树の奥秘
  • 记忆化递归讲解和【题解】—— [NOIP2001 普及组] 数的计算
  • Mamba学习笔记(1)——原理基础
  • 超强的开源OCR工具Surya更新了表识别功能!GitHub收藏人数超过1万。
  • Java微信支付接入(9) - API V3 微信支付查单API
  • 地平线与英伟达工具链 PTQ 工具功能参数对比与实操
  • 文件IO(Linux文件IO)