Вы всегда можете определить макрос, например, в Chromium мы делаем следующее для повторного использования кода:
#define CHROMEG_CALLBACK_1(CLASS, RETURN, METHOD, SENDER, ARG1) \
static RETURN METHOD ## Thunk(SENDER sender, ARG1 one, \
gpointer userdata) { \
return reinterpret_cast<CLASS*>(userdata)->METHOD(sender, one); \
} \
\
virtual RETURN METHOD(SENDER, ARG1);
И мы называем их как:
CHROMEGTK_CALLBACK_1(PageActionViewGtk, gboolean, OnExposeEvent, GdkEventExpose*);
CHROMEGTK_CALLBACK_1(PageActionViewGtk, gboolean, OnButtonPressed, GdkEventButton*);
Вы можете сделать что-то подобное, чтобы делать то, что вы хотели.Приведенный выше пример показывает, что мы используем две разные реализации, но с одной общей базой кода.Для обратных вызовов GTK.