C++11 bind绑定器 => 返回的结果还是一个函数对象
bind占位符最多有20个参数。
- function可以直接将函数类型留下来。
- bind绑定器可以给函数绑定过固定的参数。
void hello(string str) { cout << str<<endl; }
int sum(int a, int b) { return a + b; }
class Test
{
public:
int sum(int a, int b) { return a + b; }
};
int main()
{
//bind是函数模板 可以自动推线模板类型参数
//bind返回的也是绑定器也就是函数对象 需要调用它的()重载符号
bind(hello, "hello world!")();
cout << bind(sum, 10, 20)() << endl;
cout << bind(&Test::sum, Test(), 20, 30)() << endl;
return 0;
}
- 只能使用在语句中,除了语句就不能使用了;如果想要复用需要使用function结合
引入参数占位符
using namespace placeholders;
//参数占位符 绑定器出了语句 无法继续使用
bind(hello, _1)("hello bind 2!");
cout << bind(sum, _1, _2)(200, 300) << endl;
//综合function和bind就可以使得bind复用
function<void(string)> func1 = bind(hello, _1);
func1("hello china!");
func1("hello lihua!");