Sharp: У App есть наследники, которые перегружают getCallback и имеют свой набор ивентов и сигнатур колбэков (до десятка). Я преследовал цель оградить пользователя от внутреннего устройства системозависимых элементов.
Для клиентского кода существует только интерфейс:
app.setCallback(Event::CREATE, [] { "user defined callback" });
nirvimel: getCallback() возвращает указатель на анонимную лямбду с сигнатурой одного из объявленных типов, в которой происходит вызов лямбды из карты, т.е. приведения типов нет, есть дополнительный вызов. Это было сделано для того, чтобы клиентский код (ничего не зная про требуемые сигнатуры) мог устанавливать колбэки таким способом:
app.setCallback(Event::CREATE, [] { "user defined callback" });
В реальном коде App - это базовый класс с десятком наследников, у каждого из которых свои ивенты и свои сигнатуры.
Для клиентского кода существует только интерфейс:
app.setCallback(Event::CREATE, [] { "user defined callback" });