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

lijiangtao23 2010-07-27 09:37:04
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是什么意思,从哪儿来的呀,还请路过的指点一下啊!谢谢~~
...全文
76 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
太乙 2010-07-27
  • 打赏
  • 举报
回复
如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();
ayw215 2010-07-27
  • 打赏
  • 举报
回复
(p->_pobject)->(*(p->_function))
baihacker 2010-07-27
  • 打赏
  • 举报
回复
根据优先级把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;
}

64,648

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧