std::function 是 C++ 标准库中的一个类模板,用于封装可调用对象(如函数指针、函数对象、类成员函数等),并提供一种统一的方式来调用这些对象。要包含头文件#include<functional>
换句话说:
std::function 的实例化类型表示一个可调用对象的类型。我们可以将函数指针、函数对象、类成员函数等对象赋值给std::function 类型的对象,并且可以像调用函数一样,通过该对象进行调用,而且都用统一的方法调用。例:
1.封装的对象为 《函数指针》
Add就是这个函数指针赋给了std::function类模板的对象 func,这样就可以通过func调用Add函数,得到result的结果为7。
2.封装的对象为 《仿函数/函数对象》
函数对象/仿函数 是一个类,它重载了函数调用运算符 operator(),使其具有像函数一样的行为。通过实例化函数对象的类,并调用该类的对象,就可以像调用函数一样使用它们。仿函数例子如下:
如何用std::function封装这个仿函数呢
这里定义了一个仿函数 Multiply,用std::function把他封装,这样就可以通过func像函数一样调用他,把3,4作为参数传进去,调用仿函数,得到结果12。
3.封装的对象为 《类成员函数》
这里先定义了一个类 MyMath,类内有一个成员函数Multiply,然后通过std::function的对象func把该成员函数封装,并通过对象指针&math作为第一个参数来调用此成员函数,后面跟着参数3,4,得到结果12。
4.std::function的对象还可以作为函数参数
输出结果为