绑定函数: autofun1=std::bind(TestFunc,std::placeholders::_1,std::placeholders::_2,std::placeholders::_3); autofun2=std::bind(TestFunc,std::placeholders::_2,std::placeholders::_3,std::placeholders::_1); autofun3=std::bind(TestFunc,std::placeholders::_1,std::placeholders::_2,98.77)...
// 将参数 2,3 绑定到函数 foo 参数 b 和 c 上,但是使用 std::placeholders::_1 来对第一个参数进行占位。 autobindFoo = std::bind(foo, std::placeholders::_1, 2, 3); // 这时调用 bindFoo 时,只需要提供第一个参数即可 bindFoo(1); return0; }...
int main() { auto f = std::bind(print, std::placeholders::_1, 2, std::placeholders::_2); f( 1, 3); // 输出 a = 1, b = 2, c = 3 return 0; } 在上面的代码中,我们使用std::placeholders占位符来绑定print函数的第一个和第三个参数。因此,当调用f(1, 3)时,实际调...
std::placeholders::_3,std::placeholders::_2,std::placeholders::_1);//bind相当于TestFunc(_3,_2,_1); _3表示bindFunc4的实参中的第三个参数。
std::placeholders 简介 在前面C++集群的项目里面大量应用到了绑定器来做解耦操作,那么,绑定器到底是什么呢?有什么玄妙的地方嘞? 其实也不是很玄乎,以前写Qt的时候就经常用到绑定,昨天又发现,其实我们一直在用绑定器却不自知,比如说创建线程,将函数指针与它的参数一并传入。
:bind允许绑定部分或全部参数。未绑定的参数可以通过占位符(如std::placeholders::_1,std::placeholders...
f的参数要么被绑定到值,要么被绑定到placeholders(占位符,如_1, _2, ..., _n)。 std::bind将可调用对象与其参数一起进行绑定,绑定后的结果可以使用std::function保存。std::bind主要有以下两个作用: 将可调用对象和其参数绑定成一个仿函数; 只绑定部分参数,减少可调用对象传入的参数。
参见程序运行结果,参数顺序与std::placeholders中的顺序一致,因此我们可以用bind来重排参数顺序。 这些只是std::bind的基本用法,对std::bind的引入是C++11的一大亮点,将其与lambda表达式、智能指针、绑定引用参数等知识相结合会明显改变原有的代码编写。std::bind的高级用法还需要更深入学习。
1 std::bind std::bind 可以用来绑定一个函数 std::placeholders; 定义有_1、_2、_3 ... 2 std::function st...
std::bind的使用还可以结合std::placeholders占位符,用来绑定部分参数。这样,在实际调用函数时,可以继续传递剩余未绑定的参数。例如,以下代码中,使用了std::placeholders占位符来绑定print函数的第一个和第三个参数。因此,当调用f(1, 3)时,实际上执行的是print(1, 2, 3)。通过灵活运用std::...