Вы не можете сделать это напрямую, указатели на функции-члены не являются простыми указателями на функции и не могут быть перенаправлены на C
обратные вызовы напрямую.
Вам понадобится один уровень косвенности:
void callHandle(void *data) {
ClientHandle *h = static_cast<ClientHandle*>(data);
h->handle();
}
pthread_create(th, 0, &callHandle, static_cast<void*>(handle));
См. Указатели на элементы FAQ C ++ для получения дополнительной информации / альтернатив.
Для достоверности приведения в callHandle
,см. этот вопрос .Вы несете единоличную ответственность за то, чтобы убедиться, что handle
все еще жив и здоров, когда вызывается, конечно, callHandle
(и за то, что он фактически указывает на ClientHandle
).