读书人

线程池管理中的一句语法的有关问题

发布时间: 2012-09-03 09:48:39 作者: rapoo

线程池管理中的一句语法的问题
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。
->*是调用成员函数指针的语法。

C/C++ code
//示例: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();

读书人网 >C++

热点推荐