前几天用lambda写了一个程序 http://blog.csdn.net/ink_cherry/article/details/74129946
bind是用来绑定函数调用参数
这个bind 的用途,是延时执行函数 支持占位符操作
这个bind 的用途,是延时执行函数 支持占位符操作
一个简单的bind 例子
#include<iostream> #include<functional> int substract(int a, int b) { return b - a; } int main() { auto bindsbstact = std::bind(substract, std::placeholders::_2,std::placeholders::_1); std::cout << bindsbstact(5, 10); //等价于执行substract(10,5) auto bindsbstact2 = std::bind(substract, 10, std::placeholders::_1); std::cout << bindsbstact2(5); //等价于执行substract(10,5) }打印-5 -5
占位符就是 参数位置 _1 _2 _x代表原函数的第x参数函数使用形式 bind(f [,t][,…]) // 自动推断 bind<返回值类型>(f [,t][,…]) // 非自动推断 bind<返回值类型, 函数类型, 绑定器传入参数类型>(f ,[…]) // 非自动推断 bind<返回值类型, 函数参数类型, 绑定器传入参数类型>(f [,…]) // 非自动推断 bind<返回值类型, 类, 绑定器传入参数类型(即对应的类实例)>(T::*f ,t [,…]) // 非自动推断 bind<返回值类型, 类, 函数参数类型, 绑定器传入参数类型(即对应的类实例+函数传入的参数), >(T::*f ,t [,…]) // 非自动推断
一个简单的bind 例子
#include<iostream> #include<functional> int substract(int a, int b) { return b - a; } int main() { auto bindsbstact = std::bind(substract, std::placeholders::_2,std::placeholders::_1); std::cout << bindsbstact(5, 10); //等价于执行substract(10,5) auto bindsbstact2 = std::bind(substract, 10, std::placeholders::_1); std::cout << bindsbstact2(5); //等价于执行substract(10,5) }打印-5 -5
占位符就是 参数位置 _1 _2 _x代表原函数的第x参数函数使用形式 bind(f [,t][,…]) // 自动推断 bind<返回值类型>(f [,t][,…]) // 非自动推断 bind<返回值类型, 函数类型, 绑定器传入参数类型>(f ,[…]) // 非自动推断 bind<返回值类型, 函数参数类型, 绑定器传入参数类型>(f [,…]) // 非自动推断 bind<返回值类型, 类, 绑定器传入参数类型(即对应的类实例)>(T::*f ,t [,…]) // 非自动推断 bind<返回值类型, 类, 函数参数类型, 绑定器传入参数类型(即对应的类实例+函数传入的参数), >(T::*f ,t [,…]) // 非自动推断