Size: a a a

2020 March 24

S

Sasha in pro.cxx
Oleg Linkin
Ку. Есть какой-то паттерн, чтобы красиво работать с сишной либой в которую передаются указатели на функции(колбэки)? Чтобы не нужно было обмазываться статиками или постоянно создавать глобальный указатель на this?
Я видел как эту проблему решают весьма экзотическим путем - создают функцию с вшитым this прям в рантайме
источник

OL

Oleg Linkin in pro.cxx
хм, это как?
источник

S

Sasha in pro.cxx
Oleg Linkin
хм, это как?
Выделяется память, туда записывается байткод, затем она делается исполняемой
источник

OL

Oleg Linkin in pro.cxx
хммм
источник

OL

Oleg Linkin in pro.cxx
Отличная плохая идея
источник

CD

Constantine Drozdov in pro.cxx
Oleg Linkin
Ку. Есть какой-то паттерн, чтобы красиво работать с сишной либой в которую передаются указатели на функции(колбэки)? Чтобы не нужно было обмазываться статиками или постоянно создавать глобальный указатель на this?
@qToxa_man что-то знает про это
источник

AK

Anton Kviatkovskii in pro.cxx
Oleg Linkin
Ку. Есть какой-то паттерн, чтобы красиво работать с сишной либой в которую передаются указатели на функции(колбэки)? Чтобы не нужно было обмазываться статиками или постоянно создавать глобальный указатель на this?
https://github.com/Toxa-man/CallbackConnector
Здрасте, можете попробовать
источник

OL

Oleg Linkin in pro.cxx
>= с++11
Так бы уже давно заюзал
источник

ПК

Побитый Кирпич in pro.cxx
Oleg Linkin
>= с++11
Так бы уже давно заюзал
Тогда всё зависит от качества сишной либы. Если она не какашка, то там будет параметр для произвольных данных
источник

OL

Oleg Linkin in pro.cxx
она какашка
источник

NP

Nikita Provotorov in pro.cxx
Oleg Linkin
>= с++11
Так бы уже давно заюзал
Идея в несколько урезанном виде может быть перенесена и на C++03
источник

NP

Nikita Provotorov in pro.cxx
Фактически там вариадики заменить на разумное макс.количество шаблонных параметров + кастомный std::function
источник

NP

Nikita Provotorov in pro.cxx
Хотя в вашем случае даже function велосипедить скорее всего не нужно, он там используется только для хранения функторов, а в C++03 они редко используются, лямбд то нет
источник

ПК

Побитый Кирпич in pro.cxx
Nikita Provotorov
Хотя в вашем случае даже function велосипедить скорее всего не нужно, он там используется только для хранения функторов, а в C++03 они редко используются, лямбд то нет
Как раз в С++03 функторы только и юзаются, потому что лямбд нет
источник

NP

Nikita Provotorov in pro.cxx
Побитый Кирпич
Как раз в С++03 функторы только и юзаются, потому что лямбд нет
Я имел в виду немного другое. Мне вот в рамках C++03 почти никогда не доводилось писать кастомные функторы для чего-либо, они там используются то только для алгоритмов STL, и то обычно легко заменяются обычными свободными функциями
источник

ПК

Побитый Кирпич in pro.cxx
Nikita Provotorov
Я имел в виду немного другое. Мне вот в рамках C++03 почти никогда не доводилось писать кастомные функторы для чего-либо, они там используются то только для алгоритмов STL, и то обычно легко заменяются обычными свободными функциями
Если нужен захват переменной, то хрен ты заменишь это на свободную функцию
источник

NP

Nikita Provotorov in pro.cxx
Побитый Кирпич
Если нужен захват переменной, то хрен ты заменишь это на свободную функцию
Так вот, а насколько это часто нужно в C++03 в таком виде, чтобы объект по итогу был Callable?
источник

ПК

Побитый Кирпич in pro.cxx
Nikita Provotorov
Так вот, а насколько это часто нужно в C++03 в таком виде, чтобы объект по итогу был Callable?
юзкейсы не менялись в С++11. Во всех случаях где ты юзаешь непустой [] у лямбды тебе нужен функтор в С++98
источник

NP

Nikita Provotorov in pro.cxx
Побитый Кирпич
юзкейсы не менялись в С++11. Во всех случаях где ты юзаешь непустой [] у лямбды тебе нужен функтор в С++98
Юзкейсы поменялись в C++11 с приходом std::function
источник

NP

Nikita Provotorov in pro.cxx
и возможно std::async
источник