|
|
||||||
Callback. Так ли используется на практике?24.07.2017, 20:56. Показов 1313. Ответов 9
Метки нет (Все метки)
Доброго времени суток.
Сам по большему счету я работаю с Delphi, но тут сложилась надобность в С/С++ состряпать механизм "событий", как это привычно называется в Delphi или функций обратного вызова. Чутку покумекав, пришел к такому выводу, что сие можно организовать через указатель на функцию в С/С++ и в общем-то состряпал, все работает как и ожидалось. Вот код ниже должен это демонстрировать, пример на абум, отсюда и вопрос, корректно ли так использовать данный механизм? Или что-то однажды окажется "подводным камнем"?
0
|
||||||
| 24.07.2017, 20:56 | |
|
Ответы с готовыми решениями:
9
Для чего на практике используется XML в Web-программировании? Где используется AES шифрование на практике, в каких информационных системах
|
|
Каждому свое
533 / 219 / 81
Регистрация: 05.08.2013
Сообщений: 1,614
|
|
| 27.07.2017, 21:41 | |
|
Я что-то в твоем коде не вижу событий. Ты же хочешь систему событий, я так понимаю? И хендлеры подписанные на то или иное событие.
У тебя вижу в коде только передачу функции по указателю в класс, и делегированный вызов этой функции...
1
|
|
|
|
||||||
| 29.07.2017, 19:37 [ТС] | ||||||
|
Да это был первый тест, чтобы вызвать функцию "неявно" и то, я не знаю так ли это правильно делается, но по примеру выше, я получил нужный мне результат. Мне нужно, чтобы при определенных обстоятельствах, вызывалась некая функция, первым, что пришло в голову, вызвать по указателю некую функцию внутри какого-то класса, в котором происходят какие-то вещи, а в функции "снаружи" уже забираю нужный мне результат. Пример конечно же не ахти, но получил же обратную реакцию функции. На реальном примере, все конечно же будет запакованно в классы и явный такой вот вызов, как из примера
Простите уж за такие некорректные формулировки, я самоучный программер на интуитивном уровне, да и в первую очередь не сиплюсплюшний ![]() а по ответам и их сожержанию, могу судить, что нет претензий к тому, что спрашиваю и сделал все как-то так, ну или вообще все не так, что уж лучше об этом не говорить? ![]() ладно.. попробую так пока что)
0
|
||||||
|
Каждому свое
533 / 219 / 81
Регистрация: 05.08.2013
Сообщений: 1,614
|
||||||
| 30.07.2017, 08:16 | ||||||
|
Arcor, Вот простейшая сырая система событий:
Как поймешь, начни разбираться: 1. как сделать события не std::string, тоесть чтобы они хранились не в строках. У меня к примеру в реализации системы событий за счет определенного макроса генерируется макрос, который автоматом задает имя структуры и тип хендлера, который можно подписать на это событие 2. В моем приведенном коде, хендлер не имел параметров вовсе. Это не есть хорошо. Нужно сделать, чтобы ты создавал события, которые могли подписывать на себя разные прототипы хендлеров - событие 1: void(*)(int); событие 2: void(*)(); событие 3: void(*)(int, std :: string, float) и тд. Но вызов того или иного события все равно происходил через метод invoke(...) класса EventSystem. Чтобы такого достичь, читай про "Шаблоны с переменным числом параметров" или variadic templates
1
|
||||||
|
|
|
| 31.07.2017, 00:05 [ТС] | |
|
Ну и? Смысл сводится к тому, это то же самое, что и я и написал выше, только я более скудный пример описал, может я не вижу главного различия, но работает по той же системе.
Смысл все таки сводится к тому, что вызывается функция по указателю и больше ничего иного там не производится. Все ясно. Всем спасибо ![]() Пункт 2 в тексте не ясен, для чего мне "подписывать" одним методом все различные события? Понятное дело, что со списком (вектором) через цикл можно пробегаться и исктаь там что надо и уже ветвить трали-вали, НО, не более ли логичнее сказать - я хочу использовать событие "А", описать его как надо для "А" и установить все необходимое для "А" и будет явное "А". Надо второе событие "Б", описать под "Б" все, но с другим списком аргументов. И потом просто коннектить/дисконнектить те события, которые я хочу использовать вообще. И не понятно для чего вообще делать чтобы от одного условия выполнялись несколько событий, ну ОК, пусть, но осуществится то просто точно так же))) НО, спорить с профессионалами конечно же не стану ... ![]() Не по теме: но жаргончик бы... "кури пока это" как-то странно воспринимается.. да и "ты", как-то не очень чужих и незнакомых людей ТЫкать :scratch:
0
|
|
|
|
|
| 31.07.2017, 01:35 | |
|
1
|
|
|
Ушел с форума
|
|||||||
| 31.07.2017, 10:18 | |||||||
|
1. У callback-функции и ее прототипа четко определить соглашение о вызовах - stdcall, cdecl, fastcall и т.д. Это поможет в будущем избежать различных ошибок при внесении изменений в программу. 2. Дать возможность клиенту передавать в callback какие-то свои данные. Обычно это делается через дополнительный параметр размером sizeof (void *). Пример:
2
|
|||||||
|
Каждому свое
533 / 219 / 81
Регистрация: 05.08.2013
Сообщений: 1,614
|
|||||
| 01.08.2017, 08:14 | |||||
|
Arcor,
![]() RunningMan, Также как и паттерн система сообщений и паттерн система событий, тоже очень похожи, но тоже имеют разницу. Если нужно, я найду линки, где можно почитать об этом подробнее Убежденный, eventSystem -> invoke<SOME_EVENT>( параметры для SOME_EVENT )параметры метода invoke изменялись в зависимости от переданного шаблонного параметра.
1
|
|||||
|
|
|
| 01.08.2017, 11:05 [ТС] | |
|
Я все понимаю, ребят, у меня опыта просто нету
Когда-то он появится возможно и появятся уже совсем другие слова и значения в обиходе и конечно же опыт))) Но с чего-то начать надо было ![]() Благодарю всех за содействие!
0
|
|
|
Каждому свое
533 / 219 / 81
Регистрация: 05.08.2013
Сообщений: 1,614
|
||
| 01.08.2017, 13:06 | ||
|
Arcor,
Я учусь сам, и очень часто задаю тупые вопросы
0
|
||
| 01.08.2017, 13:06 | |
|
Помогаю со студенческими работами здесь
10
Невозможно получить доступ к файлу так как он используется другим процессом Не удалось получить доступ к файлу так как он используется другим процессом Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
||||
|
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Налог на собак: https:/ / **********/ gallery/ V06K53e
Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf
Пост отсюда. . .
|
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop?
Ниже её машинный перевод.
После долгих разбирательств я наконец-то вернула себе. . .
|
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод
Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод.
Thinkpad X220 Tablet —. . .
|
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта
Симптом:
После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
|
Как объединить две одинаковые БД 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
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов.
. . .
|