апи, сишная функция, которая принимает указатель на функцию определенной сигнатуры. Допустим, такой 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 которые я нашел только сужают сигнатуру, но не наоборот
Или это все фонарь и кроме как, цитата
Регистрировать функторы, создавать лукап таблицу, в функции принимающей примитив-идентификатор лукапать и вызывать
Выхода нет?
Ответ на этот, и многие другие вопросы вы увидите в новом выпуске нашего журнала "НИКАК"
Тебе надо адаптеры-враперы писать. Функции, которые имеют требуемый интерфей и вызывают твои функции с желаемым интерфейсом.
>Как расширить сигнатуру функции? Пишешь новую функцию с другой сигнатурой, которая внутри вызывает старую функцию
К тому же, у тебя тут как раз сужение сигнатуры, а не расширение.
Обсуждают сегодня