收到:
void* xxx::yyy(void* ThreadIdPtr)
现在我这样做:
pthread_create( &tp, NULL, xxx::yyy, (void*) &i);
但编译错误:
error: argument of type 'void* (xxx::)(void*)' does not match
'void* (*)(void*)'
如何正确通过?
收到:
void* xxx::yyy(void* ThreadIdPtr)
现在我这样做:
pthread_create( &tp, NULL, xxx::yyy, (void*) &i);
但编译错误:
error: argument of type 'void* (xxx::)(void*)' does not match
'void* (*)(void*)'
如何正确通过?
指向成员函数的指针不是指向函数的指针。两者简直不一样。尝试使用指向成员函数的指针,就好像它是指向函数的指针......好吧,你能希望的最好的结果就是让它快速而干净地崩溃。
尽管它可能不是技术上定义的行为,但至少有合理的机会可以使用指向静态成员函数的指针。然后,您可以将指向对象的指针作为参数传递,它可以调用该对象的正确成员函数。
除此之外,您可以使用像 pthreads 期望的普通函数,并完成它。
如果你想将成员函数传递给一个接受函子的函数,你应该这样做:
MyClass a;
some_function(&MyClass::MyMethod, a);
stdlib 中每个接受函数指针的函数都有重载来接受成员函数。如果你想在 std::thread cotr 中传递它,这样做:
std::thread(&MyClass::MyMethod, a, arg1, arg2);