Есть реализация GUI на чистом C++03 без STL, Boost. В нем есть иерархия окно->элемент->...->элемент. Одним из элементов GUI является Button. В нее приходят события OnTapDown и иже с ними.
Первым вариантом организовать Callback был указатель на функцию. Недостаток — невозможно передать функцию класса. Приходилось городить кучу статических методов, да еще и сохранять указатель на объект класса-обработчика.
Вторым вариантом (так и не реализованным) были интерфейсы с нужными функциями. Но тогда пришлось бы городить объекты для обработки каждой из кнопок.
Третий вариант сейчас уже реализованный — передача функтора, содержащего указатель на объект и указатель на фунцию класса. Пример:
typedef BaseFunctor<void, const iPoint&> ButtonCallBackFunctor
mSomeButton->SetOnTap(ButtonCallBackFunctor::Create(this, &SomeClass::SomeClassFunction));
Причем сам функтор реализован автором на шаблонах — весьма тяжелый код получился для понимания.
Есть ли идеи, как это можно сделать лучше?