Форум программистов, компьютерный форум CyberForum.ru

Делегаты и события - C++

Восстановить пароль Регистрация
 
diplomat1129
0 / 0 / 0
Регистрация: 11.02.2013
Сообщений: 83
03.04.2014, 16:37     Делегаты и события #1
Всем доброго времени суток.
Понадобилось код из C# переделать на C++. Кода в принципе не много и он не сложен в понимании. Но сам Я на C# кодил не много, и даже прочитав про делегаты и события, не понял как их можно переписать на С++. Знаю есть варианты, такие как функции обратно вызова, но не пойму как все это связать воедино. Например, смотрите:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
        /// <summary>
        /// Событие возникающее когда к серверу добавляется новый клиент
        /// </summary>
        public event EventHandler<EventClientArgs> OnNewClient;
 
        /// <summary>
        /// Делегат обработки события добавления или удаления клиента
        /// </summary>
        /// <param name="Id">Адрес клиента</param>
        /// <param name="Name">Имя клиента</param>
        private delegate void DelegateChangeClientEvent(int Id, string Name);
 
        /// <summary>
        /// Обработка добавления нового клиента - процедура синхронизируется с потоком Control и вызывается событие
        /// </summary>
        /// <param name="Id">Адрес клиента</param>
        /// <param name="Name">Имя клиента</param>
        private void NewClientEvent(int Id, string Name)
        {
            if ((Control != null) && Control.InvokeRequired)
            {
                DelegateChangeClientEvent Ev = new DelegateChangeClientEvent(NewClientEvent);
                Control.Invoke(Ev, Id, Name);
            }
            else
                if (OnNewClient != null)
                    OnNewClient(this, new EventClientArgs(Id, Name));
        }
Как можно это переделать на С++?
Спасибо
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
03.04.2014, 16:37     Делегаты и события
Посмотрите здесь:

C++ dll и события
Выход из обработчика события C++
C++ События Button
события клавиатуры в с++ C++
ожидание события C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Tulosba
:)
Эксперт С++
4378 / 3221 / 297
Регистрация: 19.02.2013
Сообщений: 9,044
03.04.2014, 16:47     Делегаты и события #2
делегат из шарпов это по сути объектно-ориентированная версия указателя на функцию (т.е. как раз то, что лежит в основе механизма обратного вызова).
diplomat1129
0 / 0 / 0
Регистрация: 11.02.2013
Сообщений: 83
04.04.2014, 12:47  [ТС]     Делегаты и события #3
Можете, пожалуйста, привести пример? желательно относительно кода, приведенного выше. Я почитал про функции обратного вызова, но опять же не пойму как связать это?
Премного благодарен.

Добавлено через 19 часов 54 минуты
Никто не знает как сделать аналогию с вышеприведенным кодом?)
Tulosba
:)
Эксперт С++
4378 / 3221 / 297
Регистрация: 19.02.2013
Сообщений: 9,044
04.04.2014, 22:08     Делегаты и события #4
Цитата Сообщение от diplomat1129 Посмотреть сообщение
относительно кода, приведенного выше.
Код, приведенный выше, опирается на особенности .Net фреймворка, чтобы переделать его на C++ нужно создать (или уже иметь) довольно существенную базу. Поэтому о каком-то простом переводе из C# в C++ в данном случае не может быть речи. Но можно всё же провести некоторые параллели.
Например:
C#
1
private delegate void DelegateChangeClientEvent(int Id, string Name);
задает тип, который может быть связан с функцией, принимающей два параметра (int и string) без возвращаемого результата. В С/C++ это можно было бы представить как указатель на функцию:
C++
1
typedef void (*f)(int, const char*)
Yandex
Объявления
04.04.2014, 22:08     Делегаты и события
Ответ Создать тему
Опции темы

Текущее время: 10:27. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru