std::function
是 C++11 引入的一个非常有用的函数对象封装类,它可以存储和调用各种类型的可调用对象,包括函数指针、函数对象、成员函数指针、Lambda表达式等等。
以下是 std::function
的基本使用方法:
#include <functional>
#include <iostream>
void function1() {
std::cout << "This is function1." << std::endl;
}
int function2(int a, int b) {
std::cout << "This is function2." << std::endl;
return a + b;
}
struct FunctionObject {
void operator()() const {
std::cout << "This is a function object." << std::endl;
}
};
int main()
{
// 使用函数指针初始化 std::function 对象
std::function<void()> f1 = function1;
f1();
// 使用Lambda表达式初始化 std::function 对象
std::function<int(int,int)> f2 = [](int a, int b) { return a * b; };
std::cout << f2(3, 4) << std::endl;
// 使用成员函数指针初始化 std::function 对象
FunctionObject obj;
std::function<void()> f3 = std::ref(obj);
f3();
return 0;
}
在上述示例中,我们分别定义了一个普通函数 function1
、一个有返回值的函数 function2
、一个函数对象 FunctionObject
,然后使用函数指针、Lambda表达式和成员函数指针分别初始化了三个 std::function
对象。注意到,函数指针和成员函数指针需要使用 std::ref()
来进行引用封装,以确保被封装的对象可以在 调用时访问。
当我们需要将一些可调用对象存储在一个容器中,或者将它们作为其他函数的参数时,std::function
可以非常方便地实现这一目标。除此之外, std::function
还可以用来实现回调函数、委托等功能。