手把手教你实现boost::bind

boost::bind操作想必大家都使用过,它特别神奇,能够绑定函数与参数,绑定后能够改变参数数量,并且还可以使用占位符。它可以绑定普通函数也可以绑定类成员函数。好多小伙伴试图看过boost::bind的源码,但是可能效果不佳。原因在于boost::bind的代码考虑了很多使用情况,而且还要兼容各种编译环境,所以实现的代码很复杂,很容易在看源码的时候被各种宏定义带跑偏,以至于乱了思路。在这里我试图抽出boost::bind核心骨架,适当简化,达到简单可理解的目的。本文所展示的代码,只用于探讨交流之用,其中固然有很多不足,请勿直接搬到线上。本文末尾有我抽取的bind骨架代码的github地址,只有300行左右,看起来更容易理解。好了,废话不多说,用一小段代码代码先展示一下boost::bind的神奇。

class Calculator { public: Calculator(){} int add(int a, int b) { return a + b; } }; int add(int a, int b) { return a + b; } int main() { //绑定普通函数 int a = boost::bind(add, 1, 2)(); //a = 3 a = boost::bind(add, _1, _2)(1, 2); //a = 3 //绑定类成员函数 a = boost::bind(&Calculator::add, &caltor, 1, 2)(); //a = 3 a = boost::bind(&Calculator::add, _1, _ 2, _3)(&caltor, 1, 2); //a = 3 return 0; }

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wpwjgp.html