参考自《Linux多线程服务端编程》以及muduo源码,对其中的一些实现细节有着十分深刻的印象,尤其是使用std::bind和std::function的回调技术。可以说,这两个大杀器简直就是现代C++的“任督二脉”,甚至可以解决继承时的虚函数指代不清的问题。在此详细叙述使用std::bind和std::function在C++对象之间的用法,用以配合解决事件驱动的编程模型。
本文组成:
1.std::function
2.std::bind
3.使用std::bind和std::function的回调技术
4.std::bind绑定到虚函数时会表现出多态行为,解决继承时的虚函数指代不清的问题
function模板类和bind模板函数,使用它们可以实现类似函数指针的功能,但却却比函数指针更加灵活,特别是函数指向类 的非静态成员函数时。不过网上有文章简单测试:函数指针要比直接调用慢2s左右;std::function 要比函数指针慢2s左右 。该测试结果链接:https://cherishlc.iteye.com/blog/2002095
std::function
std::function包含于头文件 #include<functional>中,可将各种可调用实体进行封装统一,包括
1.普通函数
2.lambda表达式
3.函数指针
4.仿函数(functor 重载括号运算符实现)
5.类成员函数
6.静态成员函数
下面source