成员函数指针和function

使用成员函数指针需要传入this,即绑定一个对对象。
use:    typedef void(_MyClass::*pdata)(void);
pdata=&_MyClass::_MyMethod();
(this->*pdata)();
      当使用find_if函数的时候这种方法并不适用,find_if的实现是if(_Pred(*_UFirst)) return true;如果第三个参数传入pdata那么内部实现就是pdata(*_UFirst),显然编译器连this地址都不清楚,调用pdata函数必然导致错误。解决方法是需要获取到可调用的对象,可以利用模板库中的function函数funciton<_MyMethodType>fun=&_MyClass::_MyMethod;将fun传入第三参数,那么实现就变为fun(*_UFirst)。function函数对()运算符进行了重载,获取到了可调用的对象*_UFirst,(重载运算符中的第一个实参)真正的调用就变为了((*_UFirst).*pdata)();
        这里需要注意_MyMethodType的参数,函数中第一个参数应该是_ClassType&。c++中类的函数调用,默认第一个参数是this,就是把自己的地址压入栈中,这就是实现多态的一个基础,同时有了this,function获取到了可调用对象,顺利成章地调用类成员函数也变得轻而易举了。
        另外function类可以包装函数对象,函数指针,成员函数指针,应该是通过继承实现参数的不同,生成不同的function类,使用function可以很好的实现回调函数,将实现和逻辑分离开来。


猜你喜欢

转载自blog.csdn.net/weixin_39662196/article/details/80598014