stdfunction和stdbind用法
时间: 2023-05-04 15:05:43 浏览: 90
std::function和std::bind是C++11 STL库中的两个非常强大的函数对象。
std::function是一个类模板,可以用来封装任何可调用对象,例如函数指针、成员函数指针、lambda表达式和函数对象等。std::function具有一个空状态,可以安全地与空的可调用对象或默认构造函数一起使用。
std::bind是一个函数模板,用于绑定一个函数或函数对象的参数。它将一个函数或函数对象的参数转换为新的可调用对象,并将调用的参数推迟到更后的时间。 std::bind可以用于定制自己的函数对象,它提供了加入自己定义的占位符_1, _2, _3等的功能,使得绑定参数的方式更加灵活。
用法示例:
std::function<int(int, int)> func; // 定义一个接受两个整数参数并返回整数的函数对象
int sum(int a, int b) { return a + b; }
func = sum; // 将sum函数赋值给func函数对象
int result = func(1, 2); // 调用func函数,返回3
std::function<void()> func2; // 定义一个无参数无返回值的函数对象
func2 = []() { cout << "Hello, world!" << endl; }; // 将lambda表达式赋值给func2函数对象
func2(); // 调用func2函数,输出Hello, world!
auto add = std::bind(sum, 5, std::placeholders::_1); // 定义一个新的可调用对象add,将函数sum的第一个参数绑定为5,第二个参数由调用者提供
int result2 = add(10); // 调用add函数,返回15
总之,std::function和std::bind可以让C++程序员更灵活地操作可调用对象,并实现函数组合、柯里化等高级功能。这些特性提高了C++11的编程效率,并使得代码更加易于维护和扩展。