апи, сишная функция, которая принимает указатель на функцию определенной сигнатуры. Допустим, такой void(window*, int, int foo, int bar, int baz)
                  
                  
                  
                  
                  
                  Есть коллбек, т.е. std::function с сигнатурой void(int foo, int bar, int baz),
                  
                  
                  
                  
                  
                  Мне нужно их подружить, т.е. создать нечто, что выполняет передается в изначальное апи и делает то что должен делать коллбек.
                  
                  
                  
                  
                  
                  Из этого есть два вопроса:
                  
                  
                  1) Какие правило конвертации какого-нибудь callable в сишный указатель на функцию? Какие именно сущности вызываемые с оператором () можно передать в указатель на функцию?
                  
                  
                  Пока что знаю что лямбду с замыканием точно никак нельзя, а остальное?
                  
                  
                  2) Как расширить сигнатуру функции? т.е. собственно из void(int foo, int bar, int baz)  сделать void(window*, int, int foo, int bar, int baz)
                  
                  
                  Примеры с std::bind которые я нашел только сужают сигнатуру, но не наоборот
                  
                  
                  
                  
                  
                  
                  
                  
                  Или это все фонарь и кроме как, цитата
                  
                  
                  Регистрировать функторы, создавать лукап таблицу, в функции принимающей примитив-идентификатор лукапать и вызывать
                  
                  
                  
                  
                  
                  Выхода нет?
                  
                  
                
Ответ на этот, и многие другие вопросы вы увидите в новом выпуске нашего журнала "НИКАК"
Тебе надо адаптеры-враперы писать. Функции, которые имеют требуемый интерфей и вызывают твои функции с желаемым интерфейсом.
>Как расширить сигнатуру функции? Пишешь новую функцию с другой сигнатурой, которая внутри вызывает старую функцию
К тому же, у тебя тут как раз сужение сигнатуры, а не расширение.
Обсуждают сегодня