我知道了:
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*)'
如何正确传递?
答案 0 :(得分:3)
指向成员函数的指针不是指向函数的指针。这两者并不相同。尝试使用指向成员函数的指针,就像它是一个指向函数的指针一样......好吧,关于你可能希望的最好的是它会快速干净地崩溃。
虽然它可能不是技术上定义的行为,但至少有可能使用指向静态成员函数的指针。然后,您可以将指针作为参数传递给对象,并且可以调用该对象的正确成员函数。
除此之外,您可以使用pthreads期望的普通函数,并使用它完成。
答案 1 :(得分:0)
如果你想将成员函数传递给带有仿函数的函数,你应该这样做:
MyClass a;
some_function(&MyClass::MyMethod, a);
stdlib中每个接受函数指针的函数都有重载来获取成员函数。如果你想在std :: thread cotr中传递它,可以这样做:
std::thread(&MyClass::MyMethod, a, arg1, arg2);