![]() |
ktsignalНебольшая библиотека сигналов для C++. Для компиляции потребуется C++17 (на MSVC можно скомпилировать на C++14)
Немного примеров кодаБазовое использование:Пример ниже показывает базовое использование сигналов C++: Код:
voidScoped соединения автоматически отключаются в конце области видимости C++: [CODE] void on_click ( int value ) { } class A { public : void on_class_click ( int value ) { } } ; int main ( ) { ktsignal :: ktsignal click { } ; { auto connection = click . scoped_connect ( on_click ) ; A object ; auto method_connection = click . scoped_connect ( & object , & A :: on_class_click ) ; click . scoped_connect ( [ ] ( int v ) { std :: cout Подключение / Отключение коллбэков C++: Код:
autoНесколько важных замечаний об объекте Код:
ktsignal_connection
C++: [CODE] int on_click ( int value ) { return 5 ; } int on_click_second ( int value ) { return 1 ; } int main ( ) { ktsignal :: ktsignal click { } ; click . connect ( on_click ) ; click . connect ( on_click_second ) ; // Будет выведено `emit_iterate returned 5 emit_iterate returned 1` for ( auto returned : signal . emit_iterate ( 1 ) ) { std :: cout Также вы легко можете использовать функции из стандартной библиотеки C++ C++: [CODE] int on_click ( int value ) { return 5 ; } int on_click_second ( int value ) { return 1 ; } int main ( ) { ktsignal :: ktsignal click { } ; click . connect ( on_click ) ; click . connect ( on_click_second ) ; auto iterate = signal . emit_iterate ( 0 ) ; auto accumulated = std :: accumulate ( iterate . begin ( ) , iterate . end ( ) , 0 ) ; // Will display 6 std :: cout Использование ktsignal в многопоточном кодеДля многопоточного кода вы должны использовать Код:
ktsignal_threadsafeКод:
voidКод: Код:
Вывод:C++: Код:
voidКод: Код:
Вывод:Download & Source: GitHub - KiN4StAt/ktsignal Contribute to KiN4StAt/ktsignal development by creating an account on GitHub. github.com |
Цитата:
|
Цитата:
Исправил до того как ты написал этот ответ. |
Цитата:
UPD: В примере многопоточки сигнал что-то возвращает int(int) |
Цитата:
Не стал делать вектор возвратных значений для emit чтобы не оверхеда. При желании есть emit_iterate который позволяет это сделать |
Цитата:
|
Цитата:
Ну например вот такое: C++: Код:
autoИ в vec будут все значения которые вернулись после вызова коллбэков (Только что залил обновление на гите, теперь на MSVC можно конструировать STL контейнеры через итераторы. Microsoft решили выебнуться проверкой на поля итератора) Цитата:
Цитата:
https://forum.antichat.xyz/attachments/27835703/ Цитата:
|
qt на минималках
|
дежавю от документации
|
Цитата:
|
| Время: 02:26 |