2000字范文,分享全网优秀范文,学习好帮手!
2000字范文 > oc 协议 回调 静态成员_每日一问:c++类的成员函数 能作为线程的参数吗?

oc 协议 回调 静态成员_每日一问:c++类的成员函数 能作为线程的参数吗?

时间:2021-05-23 08:43:26

相关推荐

oc 协议 回调 静态成员_每日一问:c++类的成员函数 能作为线程的参数吗?

问:类的成员函数可以传入线程参数吗?

回答:

如果c语言的全局函数,可以。

如果是类的静态成员函数,可以

如果是类的普通成员函数,不可以

为什么?

《深入探索C++对象模型》中提到成员函数时,当成员函数不是静态的,虚函数,那么我们有以下结论:(1)&类名::函数名获取的是成员函数的实际地址;(2)对于函数x来讲obj.x()编译器转化后表现为x(&obj),&obj作为this指针传入;(3)无法通过强制类型转换在类成员函数指针与其外形几乎一样的普通函数指针之间进行有效的转换。所以,要在回调函数中传入一个类的普通成员函数时,this指针无处安放使得回调函数比较复杂。

怎么解决?

对成员函数进行强制转换,当作回调函数

class MyClass {pthread_t TID;void func() {//子线程执行代码} public:bool startThread() {//启动子线程typedef void* (*FUNC)(void*);//定义FUNC类型是一个指向函数的指针,该函数参数为void*,返回值为void*FUNC callback = (FUNC)&MyClass::func;//强制转换func()的类型int ret = pthread_create( &TID , NULL , callback , this );if( ret != 0 ) return false;else return true;} }; int main() {MyClass a;a.startThread(); }

回调函数为普通函数,但在函数体内执行成员函数

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。