Как передать метод в качестве обратного вызова в другой класс?
==============================================================

У меня есть вопрос, касающийся обратных вызовов с использованием tr1 :: function. Я определил следующее:

Я определил другой класс:

Теперь я хочу зарегистрировать свою функцию «myCallback». в качестве обратного вызова в классе «SomeClass» с использованием метода «registerCallback». Тем не менее, это не работает. Я посмотрел документацию по функции, и кажется законным использование (членов) методов класса для обратных вызовов. Я ошибся?

Заранее спасибо!

Используйте шаблоны:

Такой как это. И использовать это:



Почему все это так сложно?

Почему бы не создать класс таким образом (например)

Затем просто создайте классы, которые наследуют этот класс (и переопределите метод`RunMouseOverCallback`)

Тогда функция Register просто должна быть

Метод register просто вызовет метод, и у объекта будет все, что ему нужно.

Кажется, немного проще. Пусть компилятор выполняет работу с указателями на функции и т. Д.



Функции-члены имеют неявный первый параметр,`this` указатель, чтобы узнать, на каком объекте вызывать функцию. Обычно это скрыто от вас, но для привязки функции-члена к std :: function вам необходимо явно указать тип класса в параметре шаблона.

Выход:`You called me?`;



функция`void (*)(unsigned char*, int)` это свободная функция, которая отличается от`void (SomeOtherClass::*)(unsigned char*, int)`Таким образом, ошибка. Вам нужен объект для вызова последнего, тогда как первый является бесплатной функцией.

Посмотрите на возможные решения, перечисленные в[Повысить документацию](https://www.boost.org/doc/libs/1_49_0/doc/html/function/tutorial.html#id1529941)

Другая возможность заключается в том, что ваш`SomeOtherClass::myCallback` является частным, поэтому у вас нет доступа к нему.