std::function 为什么要有function
时间: 2023-07-23 21:04:54 浏览: 49
`std::function` 是一个通用的函数封装器,可以包装任何可调用对象(函数、函数指针、成员函数指针、lambda表达式等),它的作用类似于一个函数指针,但是它具有更高的灵活性和泛化能力。
使用 `std::function` 可以让代码更加灵活,可以在运行时动态地绑定函数或方法,而不需要提前确定具体的函数类型。例如,可以将一个 `std::function` 对象传递给一个函数,这个函数可以在运行时决定调用哪一个函数,从而实现了函数的动态调用。
此外,`std::function` 还支持函数对象的复制和移动,可以用于实现回调函数、事件处理等功能。在C++11标准中,`std::function` 成为了 STL 中的一员,成为了 C++ 编程中重要的工具之一。
相关问题
std::unary_function
`std::unary_function`是一个过时的函数对象基类,它定义了一个单参数函数对象的接口,具有一个参数类型和一个返回类型。这个类已经在C++11标准中被废弃,C++11中推荐使用更通用的函数对象基类`std::function`或`std::unary_function`的替代方案`std::unary_function`的替代方案。
`std::unary_function`有两个模板参数,第一个是函数对象的参数类型,第二个是函数对象的返回类型。它提供了两个公共成员:参数类型typedef `argument_type`和返回类型typedef `result_type`。如果要定义一个单参数函数对象,可以从`std::unary_function`派生出一个类,并定义自己的调用运算符。
举个例子,下面是一个继承自`std::unary_function`的函数对象类模板:
```
template <typename Arg, typename Result>
struct MyFunction : public std::unary_function<Arg, Result>
{
Result operator()(const Arg& arg) const
{
// function body
}
};
```
std::function是什么
std::function是C++标准库中的一个模板类,它可以用来封装可调用对象,包括函数、函数指针、成员函数指针以及函数对象。它提供了一种通用的机制来存储、复制、调用这些可调用对象。
使用std::function可以实现函数回调、函数参数传递等灵活的编程方式。它类似于函数指针,但比函数指针更灵活,可以存储不同类型的可调用对象,并且可以在运行时动态地决定调用哪个对象。
例如,可以使用std::function定义一个变量,将一个可调用对象赋值给它,然后通过该变量来调用这个可调用对象。这样可以实现函数的动态绑定和替换,提高了代码的灵活性和可重用性。
下面是一个简单的示例:
```cpp
#include <iostream>
#include <functional>
void func() {
std::cout << "Hello, World!" << std::endl;
}
int main() {
std::function<void()> f = func;
f(); // 调用func函数
return 0;
}
```
该示例中,我们定义了一个无参无返回值的函数`func`,然后使用std::function定义了一个类型为`void()`(即无参无返回值)的变量`f`,并将`func`赋值给了它。最后通过`f()`来调用`func`函数。