std::function
时间: 2023-06-21 10:10:09 浏览: 48
`std::function`是C++11中提供的一个模板类,用于封装可调用对象(函数、函数指针、成员函数、仿函数、Lambda表达式等),并且可以存储和调用它们。这个类的定义在头文件`<functional>`中。
`std::function`的用法与函数指针类似,但是它具有更加灵活的特性。通过使用`std::function`,我们可以在运行时动态地确定要调用的函数或函数对象,而不需要在编译时就确定。
下面是一个使用`std::function`的示例:
```c++
#include <functional>
#include <iostream>
void foo() {
std::cout << "foo" << std::endl;
}
int bar(int x, int y) {
return x + y;
}
class MyClass {
public:
void baz() {
std::cout << "baz" << std::endl;
}
};
int main() {
std::function<void()> f1 = foo;
f1(); // 输出 "foo"
std::function<int(int, int)> f2 = bar;
std::cout << f2(1, 2) << std::endl; // 输出 "3"
MyClass obj;
std::function<void()> f3 = std::bind(&MyClass::baz, &obj);
f3(); // 输出 "baz"
return 0;
}
```
在上面的示例中,我们首先定义了一个无参无返回值的函数`foo`和一个有两个参数和返回值的函数`bar`,以及一个带有一个无参无返回值的成员函数`baz`的类`MyClass`。然后,我们分别使用`std::function`封装了这三个可调用对象,并且在程序中动态地调用了它们。注意,我们可以使用`std::bind`来绑定成员函数和对象指针,从而将其转化为一个可调用对象。
阅读全文