C ++: использование указателей на функции с функциями-членами - PullRequest
10 голосов
/ 16 августа 2011

Я пытаюсь передать функцию другой функции в качестве параметра, и они оба являются функциями-членами одного класса.

Я получаю странную ошибку и не могу понятьв чем проблема.

Вот мои функции:

void myClass::functionToPass()
{
   // does something
}

void myClass::function1(void (*passedFunction)())
{
   (*passedFunction)();
}

void myClass::function2()
{
   function1( &myClass::functionToPass );
}

Однако я получаю следующую ошибку:

   cannot convert parameter 1 from 'void(__thiscall myClass::*) (void)' 
   to 'void(__cdecl*)(void)'

Так что дает?Я чувствую, что попробовал все варианты, чтобы заставить это работать.Можете ли вы даже передать указатели на функции-члены?Как я могу заставить это работать?

Примечание: Создание функции functionToPass на самом деле не является допустимым вариантом.

Ответы [ 2 ]

11 голосов
/ 16 августа 2011

Вы можете передавать указатели на функции-члены.Но это не то, что делает ваш код.Вы путаетесь между обычными указателями на функции (void (*passedFunction)() - указатель на обычную функцию) и указателями на функции-члены (&myClass::functionToPass - указатель на функцию-член).Это не одно и то же, и они не совместимы.

Вы можете переписать свой код следующим образом

void myClass::function1(void (myClass::*passedFunction)())
{
   (this->*passedFunction)();
}

Теперь ваш код использует указатели на функции-члены, но, конечно, это означает, что выне сможет передать обычный указатель на функцию.

1 голос
/ 16 августа 2011

Как указали другие, ваша ошибка в типе передаваемого указателя функции. Это должно быть void (myClass::*passedFunction)().

Вот хороший учебник по использованию указателей на функции-члены в C ++.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...