|
3 / 3 / 0
Регистрация: 12.03.2018
Сообщений: 29
|
|||||||||||
Создание событий29.08.2021, 20:03. Показов 5687. Ответов 13
Метки нет (Все метки)
У меня есть 2 класса
Добавлено через 2 часа 43 минуты 1 Вариант (упрощенный с сайта Microsoft)
В этом методе не работает связывание внутри второго класса
0
|
|||||||||||
| 29.08.2021, 20:03 | |
|
Ответы с готовыми решениями:
13
Создание обработчиков событий Создание собственного журнала событий Создание событий для сторонней библиотеки |
|
фрилансер
6440 / 5634 / 1127
Регистрация: 11.10.2019
Сообщений: 14,980
|
|
| 29.08.2021, 20:08 | |
|
Icarus7, можно попробовать стандартными средствами:
в классе Timer завести поле std::vector<std::weak_ptr<Clock>> m_targets;в приложении все экземпляры Clock, которые смогут получать извещение, должны быть созданы динамически в std::shared_ptr<Clock>в таймер в любой момент времени отдаём шаред; таймер складывает его к себе в список таргетов. Когда вызывается onTick, у всех таргетов вызывается timer_tick
0
|
|
|
3 / 3 / 0
Регистрация: 12.03.2018
Сообщений: 29
|
|||||||
| 29.08.2021, 20:19 [ТС] | |||||||
|
2 Вариант через указатели на функцию
Мне нужен обычный механизм работы событий как в Delphi, C#, VB.NET. Ну или как в Java через интерфейсы, но такой способ тоже у меня не получился (((
0
|
|||||||
|
фрилансер
6440 / 5634 / 1127
Регистрация: 11.10.2019
Сообщений: 14,980
|
|
| 29.08.2021, 20:26 | |
|
Icarus7, в C++ нет такого встроенного механизма сигналов, насколько я знаю. Нужно делать вручную, либо брать фреймворки, в которых это реализовано, например Qt
Добавлено через 1 минуту Icarus7, но даже и там, в Qt, обменивающиеся объекты будут потомками одного класса - QObject Поэтому, можно сделать все таргеты тоже потомками одного класса, тогда список в таймере будет из указателей этого родительского класса. И ничего не будет знать о таргетах
0
|
|
|
3 / 3 / 0
Регистрация: 12.03.2018
Сообщений: 29
|
||
| 29.08.2021, 20:32 [ТС] | ||
![]() Я уже тоже стал приходить к такой мысли. Почему так? Я в отчаянии. На мой взгляд это базовые механизмы ООП. Встречал статьи где упрощенный вариант занимал наверно под 150 строчек кода. В Java тоже странный способ. Добавлено через 1 минуту Сейчас попробую
0
|
||
|
Just Do It!
|
|||||||
| 29.08.2021, 20:34 | |||||||
|
Таймер на C++ Реализация делегатов без паяльника накопипастил:
0
|
|||||||
|
фрилансер
6440 / 5634 / 1127
Регистрация: 11.10.2019
Сообщений: 14,980
|
||
| 29.08.2021, 20:37 | ||
И разработчики не стали делать какую-то общую версию, пусть каждый делает свою специализированнуюДобавлено через 1 минуту XLAT, у меня была мысля сделать подписывание лямбдами, но непонятно, как определять отмирание таргета (в случае с std::weak_ptr это элементарно)
0
|
||
|
Just Do It!
|
|||
| 29.08.2021, 21:08 | |||
|
можно сделать точно(с колокольни юзера), как в шарпе и даже лучше, но нужен вагон времени или 3 вагона желания... ![]() а так лимит час, от силы два ... Добавлено через 6 минут который подписал этот таргет. то бишь всё тот же старый древний RAII, даже умные указатели не нужны. хотя возможно потребует какой то дополнительной дисциплины от кодера, но если это упаковать в библиотеку, а не кишками по коду, то и не потребует ничаво...
0
|
|||
|
фрилансер
6440 / 5634 / 1127
Регистрация: 11.10.2019
Сообщений: 14,980
|
|
| 29.08.2021, 21:15 | |
|
XLAT, можно попробовать так - в деструкторе таргета сообщать о своём отмирании, но для этого во время подписывания нужно сделать также и зеркальное подписывание в обратную сторону
0
|
|
|
3 / 3 / 0
Регистрация: 12.03.2018
Сообщений: 29
|
||
| 30.08.2021, 10:22 [ТС] | ||
|
static void foo1() Мне это не подходит, так как нельзя будет использовать нестатические переменные классы. И меня устроит только одно связывание Источник=Получатель без множественной рассылки Добавлено через 1 минуту Фактически мне просто нужен вызов callback с возможностью связи в конструкторе получателя
0
|
||
|
Just Do It!
|
||||||||||||||
| 31.08.2021, 12:04 | ||||||||||||||
0
|
||||||||||||||
|
Just Do It!
|
|||||||||||
| 03.09.2021, 09:22 | |||||||||||
|
(продолжение).
выше код - ивенты не принимают аргументы и не возвращают результат. Исправляем, для этого включаем ШАБЛОННОЕ МЫШЛЕНИЕ: общий паттерн:
(шоп не захламлять демку подробностями тут без специализаций ...)
Если событие и делегат создаются в одной и той же области видимости, то объект Event должен быть создан до создания объекта Delegate, иначе краш. щитаю это проектным багом, который требует коррекции ...
0
|
|||||||||||
|
3 / 3 / 0
Регистрация: 12.03.2018
Сообщений: 29
|
||||||
| 03.09.2021, 12:23 [ТС] | ||||||
|
Ох. Я недавно стал изучать с++ и для меня этот код сложноват.
Огромное спасибо за ваши предложения. Нашел другой пример и немного переделал его. Недостаток, что нельзя повесить несколько обработчиков на одно событие. Пока мне он полностью подходит.
0
|
||||||
|
Just Do It!
|
|||||||
| 03.09.2021, 16:36 | |||||||
|
Кликните здесь для просмотра всего текста
следующий проектный баг: если делегат подключить сразу к нескольким событием, то менеджинг ломается. поэтому дизайн треба переписать так, чтобы делегат был полностью(от создания до удаления) частью события, а не самостоятельными единицами.
0
|
|||||||
| 03.09.2021, 16:36 | |
|
Помогаю со студенческими работами здесь
14
Динамическое создание компонентов и событий для них Создание событий MouseEnter и MouseLeave для TImage (решено)
Создание собственных событий Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
||||
|
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
|
Новый ноутбук
volvo 07.12.2025
Всем привет.
По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне:
Ryzen 5 7533HS
64 Gb DDR5
1Tb NVMe
16" Full HD Display
Win11 Pro
|
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
|
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
|
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов
На странице:
https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/
нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
|
|
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов.
. . .
|
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
|
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
|
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут.
В век Веб все очень привыкли к дизайну Single-Page-Application .
Быстренько разберем подход "на фреймах".
Мы делаем одну. . .
|
Фото: Daniel Greenwood
kumehtar 13.11.2025
|