Методы экземпляра в классе всегда имеют скрытый первый параметр для указателя this
, поэтому он несовместим с указателем вашей функции typedef. Нет прямого способа получить указатель на функцию-член. Типичным обходным решением является использование «thunk», когда вы передаете статическую функцию, которая принимает общий параметр «catch all» (такой как void *
), который может быть статически приведен к указателю по вашему выбору, для которого вы можете вызвать член функция. Пример:
class B
{
public:
static void MyThunk(void * obj)
{
static_cast<B *>(obj)->MyRealFunc();
}
void MyRealFunc()
{
// do something here
}
// . . .
};
Вы можете легко получить указатель на статическую функцию, так как она не имеет «скрытого this
», просто укажите ее, используя B::MyThunk
. Если вашей функции требуются дополнительные параметры, вы можете использовать что-то вроде функтора для захвата необходимых параметров и состояния.
Вам определенно следует прочитать эту страницу C ++ FAQ Lite, которая расскажет вам гораздо больше обо всем этом: Указатели на функции-члены