前几天用lambda写了一个程序 http://blog.youkuaiyun.com/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 [,…]) // 非自动推断
本文详细介绍了C++标准库中的std::bind函数的使用方法,通过具体示例展示了如何利用std::bind实现函数参数的占位及延迟执行,适用于希望深入理解std::bind特性的开发者。
2965

被折叠的 条评论
为什么被折叠?



