std::function
是 C++11 标准库中的一个类模板,用于封装可调用对象(函数、函数指针、成员函数指针、Lambda 表达式等),并提供一种统一的方式来管理它们。
通过 std::function
,你可以将可调用对象存储在一个对象中,并稍后调用它们,而无需在编译时知道确切的类型。这使得 std::function
特别适合于实现回调函数、事件处理等场景。
简言之:function 提供了一种灵活的方式来存储和调用可调用对象,可以在运行时确定要调用的对象。
#if 1
#include <iostream>
#include <functional>
using namespace std;
struct Functor
{
int operator()(int a, int b)
{
return a + b;
}
};
void my_add(double a, double b)
{
cout << a + b << endl;
}
struct MyClass
{
int my_function(int a, int b)
{
return a + b;
}
};
void test()
{
// 1. 封装函数对象
function<int(int, int)> func1 = Functor();
cout << func1(10, 20) << endl;
// 2. 封装普通函数
function<void(double, double)> func2 = my_add;
func2(3.14, 3.15);
// 3. 封装匿名函数
function<void(void)> func3 = []() {
cout << "hello world" << endl;
};
func3();
// 4. 封装成员函数
MyClass mc;
auto my_function = bind(&MyClass::my_function, &mc, placeholders::_1, placeholders::_2);
function<int(int, int)> func4 = my_function;
cout << func4(100, 200) << endl;
}
int main()
{
test();
return 0;
}
#endif