Форум программистов, компьютерный форум, киберфорум
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
diplomat1129
0 / 0 / 0
Регистрация: 11.02.2013
Сообщений: 83
#1

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

03.04.2014, 16:37. Просмотров 528. Ответов 3
Метки нет (Все метки)

Всем доброго времени суток.
Понадобилось код из 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));
        }
Как можно это переделать на С++?
Спасибо
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
03.04.2014, 16:37
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Делегаты и события (C++):

Собираются ли вводить делегаты? - C++
или так и собираются строго придерживаться тому, что есть - писать уже с имеющегося кучу кода вместо того, чтобы сделать это встроенным?

Заменить делегаты функциями обратного вызова - C++
public event EventHandler&lt;EventClientArgs&gt; OnNewClient; /// &lt;summary&gt; /// Обработка добавления нового клиента -...

ожидание события - C++
Есть несколько потоков и глобальная переменная. Можно ли сделать так что бы каждый поток ожидал пока переменная не приняла какое ли бо...

события от клавиатуры - C++
Сводная таблица расширенных кодов Значение 2-го Соответствующие клавиши байта 15 ...

События Button - C++
у меня уже есть то, что меняет текст на кнопки Button(с помощю OnMouseMove), если мишь находиться над этой кнопкой. но, когда я отвожу...

события клавиатуры в с++ - C++
Как сделать так что бы при нажатии на клавиатуру, дигалась картинка, и как додать картинку?спс)

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

Добавлено через 19 часов 54 минуты
Никто не знает как сделать аналогию с вышеприведенным кодом?)
0
Tulosba
:)
Эксперт С++
4397 / 3233 / 297
Регистрация: 19.02.2013
Сообщений: 9,045
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*)
0
04.04.2014, 22:08
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
04.04.2014, 22:08
Привет! Вот еще темы с ответами:

События и их обработка - C++
Подскажите как можно реализовать обработку событий, чтобы можно было использовать примерно такой код: void test_handler(object*...

dll и события - C++
Как можно реализовать автоматический вызов ф-ии при подключении длл? Т.е. есть dll, так вот она должна подать сигнал сразу при ее...

События в ANSI C++ - C++
Прошу прощенья, что не очень внятно формулирую тему. Для меня это познавательный вопрос. Меня интересует: 1)Можно ли и как в...

Определение нового события - C++
Здравствуйте! Моя проблема такова. У меня есть три юнита в игре. В ней юниты должны атаковать друг друга по заранее спланированному...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.