线程池管理中的一句语法的问题
template <typename T>
struct ThreadParam
{
void (T::* _function)();
T* _pobject;
ThreadParam(void (T::* function)(), T * pobject)
: _function(function), _pobject(pobject) { }
};
template <typename T>
static DWORD WINAPI WorkerThreadProc(LPVOID pvParam)
{
std::auto_ptr< ThreadParam<T> > p(static_cast< ThreadParam<T>* >(pvParam));
try {
(p->_pobject->*p->_function)();
}
catch(...) {}
return 0;
}
p->_pobject->*p->_function这一行中的第二个p是什么意思,从哪儿来的呀,还请路过的指点一下啊!谢谢~~
[解决办法]
根据优先级把p->_function看在一起的。
实际上就是ThreadParam实例中的_function。
->*是调用成员函数指针的语法。
//示例:struct fucker{ void foo(){cout<<"fucked"<<endl;}};int main(){ void (fucker::*_function)() = &fucker::foo; fucker f; fucker* pf = &f; (pf->*_function)(); return 0;}
[解决办法]
(p->_pobject)->(*(p->_function))
[解决办法]
如1l所说:
p->_pobject->*p->_function
lz可以看成是:
p->_pobject ---> a
p->_function --> fun
a->*fun();
如果是个对象的话 aa.myfun();这个应该见过吧?
a = &&aa;
fun = &A::myfun;
*fun() = myfun();
a->*fun() = aa.myfun();