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