Я работаю над меню OpenGL, которое содержит несколько кнопок.Я хочу иметь возможность связать действие (функцию-член (с фиксированной сигнатурой) любого класса!) С кнопкой, которая выполняется при нажатии кнопки.Я могу сделать это прямо сейчас, но только для одного типа.Я хочу использовать любую функцию-член любого класса для моего обратного вызова.
Сейчас я делаю это так:
#define BUTTONCALLBACK(Func) bind1st( mem_fun( &ClassICanSupport::Func ), this )
Затем я могу создать такую кнопку:
Button* b = new Button("Bla", BUTTONCALLBACK(functionIWanttoCall));
Функция обратного вызова имеет следующую подпись:
void callback(Button* source);
Когда я нажимаю кнопку, я могу выполнить функцию обратного вызова, которую я прошел.
У меня быловзгляните на boost :: bind, но я не смог найти способ решить проблему.Кроме того, все мои классы являются производными от класса Object, поэтому я подумал о void *, который я мог преобразовать в нужный класс с помощью некоторого взлома typeid, но я не смог заставить его работать.В конце у меня всегда была проблема, заключающаяся в том, что я не мог полностью исключить тип класса функции обратного вызова (который был бы необходим для сохранения указателя функции в моем классе кнопок) и все еще иметь возможность вызывать функцию.
У вас есть идеи, как решить эту проблему?