成员函式的callback function

来源:互联网 发布:手机投影仪连接软件 编辑:程序博客网 时间:2024/06/05 22:32
C语言的callback function做法只能用函式指标去储存全域函式,在C++中要用同一招会显的很不自然,因为全域函式无法封装到类别当中,而member function则无法直接传递函式指标,因为没连带物件指标一起传是没用的。


于是boost用样板技巧创造出可以呼叫成员函式的“仿函式”,它将成员函式跟物件的指标封装在一起,呼叫的人并不需要知道这boost::function的内容物是哪里来的,装的是全域函式还是成员函式也不用知道,甚至连这函式实际上到底需要多少个参数也不知道,非常全面的取代了 C语言的 callback function,你只要知道它可以取代函式指标,尤其想实现成员函式的callback function只剩这条路可选。


不过需要注意“仿函式”是用样板实现的,而样板魔法只能实作在标头档上面,这也不算什么缺点,跟它带来的好处相比实在太划算了。


仿函式历经长时间的演化,已经成为了非常强大的好用工具,在C++11里面已经成为标准库成员了。


我的专案里有个山寨版的仿函式实作,大多功能都有实现了,内容会比boost的原作好懂许多
,还满有趣的,尤其bind的实作手法相当精彩,运用了继承、样板偏特化、多载,感谢boost高手们的贡献,如果看不懂实作的话无所谓,毕竟那些样板技巧很少用到。
0 0
原创粉丝点击