对可调用对象(函数指针,仿函数,lambda表达式等)进行参数绑定,C++11提供了名为bind的标准库函数,它定义在头文件functional中。
bind函数可以看作是一个通用的函数适配器,它可以接受一个可调用对象,生成一个新的可调用对象来"适应"原对象的参数列表。
调用bind的一般形式为:auto newCallable = bind(callable, arg_list)
其中,newCallable本身是一个可调用对象,arg_list是一个逗号分隔的参数列表(形如arg1,arg2,arg3,…),对应给定的callable的参数。
当我们调用newCallable时,newCallabele会调用 callable,并传递给它arg_list中参数。
arg_list中的可能存在形如_n(n为自然整数)的占位符,这些占位符表示newCallable的参数,它们占据了传递给newCallable的参数的“位置”。
例如 _1为newCallable的第一个参数,_2为第二个参数,以此类推。
note:名字_n都定义在一个名为placeholders的命名空间中,而这个命名空间本身又定义在std命名空间中,所有需要先声明才能使用。
可以使用以下几种声明:
1、using std::placeholders::_n; //n为1 2 3 4 5 …
2、using namespace std::placeholders; //推荐
看了这么多文字,相信你和我一样一头雾水,让我们来看个简单的例子:
bool findstr(const string &str,string::size_type length