-2

收到:

 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*)'

如何正确通过?

4

2 回答 2

3

指向成员函数的指针不是指向函数的指针。两者简直不一样。尝试使用指向成员函数的指针,就好像它是指向函数的指针......好吧,你能希望的最好的结果就是让它快速而干净地崩溃。

尽管它可能不是技术上定义的行为,但至少有合理的机会可以使用指向静态成员函数的指针。然后,您可以将指向对象的指针作为参数传递,它可以调用该对象的正确成员函数。

除此之外,您可以使用像 pthreads 期望的普通函数,并完成它。

于 2013-08-16T06:04:44.290 回答
0

如果你想将成员函数传递给一个接受函子的函数,你应该这样做:

MyClass a;
some_function(&MyClass::MyMethod, a);

stdlib 中每个接受函数指针的函数都有重载来接受成员函数。如果你想在 std::thread cotr 中传递它,这样做:

std::thread(&MyClass::MyMethod, a, arg1, arg2);
于 2013-08-16T06:14:26.777 回答