# C++之functional库用法整理

C++之functional库用法整理

注:整理一些突然学到的C++知识,随时mark一下

例如:忘记的关键字用法,新关键字,新数据结构


C++ 的function库用法整理

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

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


一、functional库的内建仿函数

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

1. 存储和调用函数

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

cpp 复制代码
#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 表达式。

cpp 复制代码
#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 用作函数的参数或返回值,实现更灵活的函数接口。

cpp 复制代码
#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 也可以绑定到类的成员函数或带参数的函数。

cpp 复制代码
#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 表达式结合使用。

总结

相关推荐
dialect_4 小时前
KMP算法
开发语言·c++·算法
总要学点什么5 小时前
第89篇:三维特效-螺旋圆效果——让螺旋臂卷起一圈圈外扩的涟漪
开发语言·javascript·ecmascript·webgl·cesium·空间分析·1024程序员节
ShineWinsu6 小时前
对于Qt:QRadioButton常见属性以及QButtonGroup的解析
数据库·c++·qt·microsoft·gui·qradiobutton·qbuttongroup
傲世仙尊6 小时前
多态-虚表才活到运行期符号表早已消失
c++
开开心心_Every6 小时前
快速隐藏程序工具自定义快捷键一键切换
java·开发语言·前端·spring·智能手机·word·intellij-idea
chenbingjie_c7 小时前
C++ 多态完全指南:从虚函数重写到虚函数表原理
开发语言·c++
是main不是漫7 小时前
【双指针——移动零】数组划分类题目的入门基石
c++·算法
吴卫斌7 小时前
定投ETF实战指南(四):行业/主题ETF——定投的“进攻端“
开发语言·python·股票·量化
·present·7 小时前
CSAPP(Bomb lab)
c语言·c++
王老师青少年编程7 小时前
2026年信奥赛c++普及组csp-j第二轮复赛真题
c++·真题·csp·信奥赛