std::function
Posted osbreak
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了std::function相关的知识,希望对你有一定的参考价值。
类模版std::function是一种通用、多态的函数封装。
可调用对象的包装器,它最重要的功能是实现延时调用。
std::function对象是对C++中现有的可调用实体的一种类型安全的封装。
1、绑定普通函数 void func(void) std::cout << __FUNCTION__ << std::endl; std::function<void(void)> fr1 = func; fr1();
2、绑定一个类的静态成员函数 class Foo public: static int foo_func(int a) std::cout << __FUNCTION__ << "(" << a << ") ->: "; return a; ; std::function<int(int)> fr2 = Foo::foo_func; std::cout << fr2(123) << std::endl;
3、重载()函数 class Bar public: int operator()(int a) std::cout << __FUNCTION__ << "(" << a << ") ->: "; return a; ; Bar bar; std::cout << bar(123) << std::endl;
4、回调函数 void call_when_even(int x, const std::function<void(int)>& f) if (!(x & 1)) //x % 2 == 0 f(x); void output(int x) std::cout << x << " "; call_when_even(i, output);
5、未绑定参数调用函数对象时,每个占位符 _N 被对应的第 N 个未绑定参数替换. //std::placeholders::_1 占位符 auto fr = std::bind(output, std::placeholders::_1, std::placeholders::_2); fr(1,2) std::bind(output, 1, 2)(); std::bind(output, std::placeholders::_1, 2)(1); std::bind(output, 2, std::placeholders::_1)(1); std::bind(output, 2, std::placeholders::_2)(1); //error:调用时没有第二个参数 std::bind(output, 2, std::placeholders::_2)(1, 2); //输出 2 2 调用时第一个参数被吞掉了 std::bind(output, std::placeholders::_1, std::placeholders::_2)(1, 2); //输出 1 2 std::bind(output, std::placeholders::_2, std::placeholders::_1)(1, 2); //输出 2 1
以上是关于std::function的主要内容,如果未能解决你的问题,请参考以下文章