在这个问题上卡了四个小时,终于解决了纪念一下。
解决方法
1.使用bind将成员函数和其所属对象绑定在一起,生成一个新的可调用对象。
例如:
http_conn a ; // http_conn 是一个类
function<void(void *)> f = bind(&http_conn::process, a, (void *)unvalid);
function<void(void *)>: 定义的回调函数类型
process:类内函数
a:指向http_conn 类的地址
(void *)unvalid:成员函数的参数
2.将生成的可调用对象传入可以调用回调函数的函数中
task (f, unvalid);
task :可以调用回调函数的函数
原理:
如果直接传入类的成员函数地址,编译器无法找到调用对象。即使你是用实例对象.成员方法也不行。
所以需要把调用成员函数的对象和成员函数捆绑在一块才行。