Форум программистов, компьютерный форум, киберфорум
C++
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.50/8: Рейтинг темы: голосов - 8, средняя оценка - 4.50
5 / 6 / 4
Регистрация: 18.11.2009
Сообщений: 661
1

События в ANSI C++

30.06.2011, 13:18. Просмотров 1570. Ответов 10
Метки нет (Все метки)

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

2)примеры моделей классов, где без событий нельзя обойтись.
Причем чтобы это были скажем не события типа ButtonOnClick и пр как в С++ Builder или VisStudio а настоящие, присутствие которых диктуется логикой модели предм области.

Мне известно, что вроде в C# появилась поддержка механизма событий. Но я программирую на
C++
Из материалов инета на эту тему приведу цитату
"С++ не поддерживает указатели на функцию-член класса" -
но как-то это связано с этим, но не понимаю.
Если можете, поясните подробно и может с приведением несложных учебных примеров
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
30.06.2011, 13:18
Ответы с готовыми решениями:

Обработка .txt кодировка ANSI и UTF-8 (буква "я" в ANSI воспринимается как EOF)
Есть следующий кусок кода: FILE* fp = fopen("G:\OPND1.txt", "r"); if (fp!=NULL) // если файл...

UTF8 и Ansi в Ansi
В программу на вход поступают текстовые документы с разными кодировками (UTF8 или Ansi)....

Как вызвать один обработчик события в другом обработчике события?
Здравствуйте. Подскажите пожалуйста, каким образом можно вызвать информацию из одного обработчика...

Как в одном обработчике события запустить другой обработчик события
Есть список listView1, который заполняется из массива PeopleListprivate void...

10
Freelance
Эксперт С++
2871 / 1806 / 355
Регистрация: 09.09.2010
Сообщений: 3,841
30.06.2011, 14:04 2
Цитата Сообщение от eugrita Посмотреть сообщение
С++ не поддерживает указатели на функцию-член класса
А это тогда что ?
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include <iostream>
 
class A{
public:
  A(int i = 0) : i_(i) {}
  int double_val() { return i_ + i_;}
  int i_;
};
 
int main(){
  int (A::*func)();//Указатель на функцию-член
  A ob(4);
  func = &A::double_val;
  std::cout << (ob.*func)() << std::endl;
  return 0;
}
0
503 / 459 / 3
Регистрация: 08.07.2009
Сообщений: 2,625
30.06.2011, 15:20 3
Цитата Сообщение от eugrita Посмотреть сообщение
Прошу прощенья, что не очень внятно формулирую тему. Для меня это познавательный вопрос.
Меня интересует:
1)Можно ли и как в классическом C++ без всяких GUI (C++ Builder, Visual Studio)
использовать механизм событий
Можно конечно юзать собития. Event придумали (не уверен) в с++. А на чём написан C++ Bulder ? На С++

2)примеры моделей классов, где без событий нельзя обойтись.
Причем чтобы это были скажем не события типа ButtonOnClick и пр как в С++ Builder или VisStudio а настоящие, присутствие которых диктуется логикой модели предм области.

Мне известно, что вроде в C# появилась поддержка механизма событий. Но я программирую на
C++
Из материалов инета на эту тему приведу цитату
"С++ не поддерживает указатели на функцию-член класса" -
но как-то это связано с этим, но не понимаю.
Если можете, поясните подробно и может с приведением несложных учебных примеров
Уже asics ответил.
0
1195 / 822 / 180
Регистрация: 16.03.2008
Сообщений: 3,950
Записей в блоге: 1
30.06.2011, 16:22 4

Не по теме:


Брюзжание:
1 вопрос понятен, но поставлен не корректно: как могут зависеть возможности языка от используемой IDE? Писать код можно и в notepad. Другое дело используемые библиотеки классов



Если учесть, что классы в библиотеках написаны в конечном итоге на Си/Си++/asm. ТО да - можно. Достаточно написать свою версию
0
5 / 6 / 4
Регистрация: 18.11.2009
Сообщений: 661
04.07.2011, 15:30  [ТС] 5
Ну к сожалению пока ответы слишком расплывчаты. Указатель на функцию член -класса есть?
Тогда, что же в интернете писали брехню?
А по поводу учебного примера модели с событиям - пока ничего. Ну ей богу, хоть из какой-нибудь
АСУ РВ - например, управление индикаторами пожаробезопасности. Но это сложно.
Что-нибудь совсем простое
0
503 / 459 / 3
Регистрация: 08.07.2009
Сообщений: 2,625
04.07.2011, 15:39 6
int (A::*func)();//Указатель на функцию-член
. asics же уже ответил прямо на вопрос.
Что вам ещё надо ? Уже не раз сказали, что события существуют независимо от IDE.

 Комментарий модератора 
Уважительно относитесь к другим участникам форума.
Правила форума, п. 4.1
0
Freelance
Эксперт С++
2871 / 1806 / 355
Регистрация: 09.09.2010
Сообщений: 3,841
04.07.2011, 15:45 7
Цитата Сообщение от eugrita Посмотреть сообщение
Тогда, что же в интернете писали брехню?
Просто интересно, а на каком ресурсе вы нашли эту инфу(стосовно указателя на функцию-член) ?
0
929 / 754 / 299
Регистрация: 09.12.2010
Сообщений: 1,346
Записей в блоге: 1
05.07.2011, 05:20 8
eugrita, все функции обратного вызова callback которые указывают на функцию и вызываются системными процедурами от устройств ввода это и есть события, та функция которая вызывается вне объекта-класса или функции но передётся объекту как будто у него есть своё событие. примерчик:

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
class DlgMain {
private:
  static LRESULT CALLBACK  Proc(HWND, UINT, WPARAM, LPARAM lParam) {
       ...
       WM_LBUTTONDOWN {
               POINT p = { LOWORD(lParam), HIWORD(lParam) };
               DlgMain::OnLeftButtonDown(&p);
       } break;
       ...
   }
protected:
   virtual  void OnLeftButtonDown(LPPOINT p) {}
}
 
 
// производный класс
 
class Dialog: public DlgMain {
  private:
       virtual  void OnLeftButtonDown(LPPOINT p) {
               ... Здесь уже получаем событие на левый клик мыши с координатами
       }
} 
 
// вот и класс уже имеет своё событие
int WINAPI WinMain(...) {
    Dialog dlg;
}
Вот в Managed CLR VC++ .NET есть ключевые слова для создания событий __hook, __unhook, __event, тоже самое что и функции обратного вызова.
0
Эксперт С++
2119 / 1558 / 231
Регистрация: 29.05.2011
Сообщений: 3,236
05.07.2011, 09:35 9
xAtom, хм, интересно. Как статическая функция Proc сможет вызвать нестатическую виртуальную функцию DlgMain::OnLeftButtonDown?
0
Эксперт С++
2919 / 1268 / 114
Регистрация: 27.05.2008
Сообщений: 3,465
05.07.2011, 10:16 10
http://code.google.com/p/cpp-events/
0
5 / 6 / 4
Регистрация: 18.11.2009
Сообщений: 661
05.07.2011, 11:06  [ТС] 11
Да ,вот довольно много написано на rsdn
http://www.rsdn.ru/article/cpp/fastdelegate.xml
Как-то тема затрагивалась (не в контексте "событий" а в контексте call-back -функции ) и на этом форуме
http://www.cyberforum.ru/cpp-b... 29497.html
Но все равно. Конечно надо уметь и знать случаи применения call-back функций а также знать
и уметь разрабатывать модели с событиями на простом C++
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
05.07.2011, 11:06

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

использовать обработку события по изменению данных DataGridView в обработке события сторонней кнопки
Имеется некий DataGridView, при изменении данных в определенной ячейке которого создается...

Почему если делегат события определен в другом классе, то не получается создать генерацию события?
В проекте №1 объявлен делегат для события: delegate void StateEventHandler(State state); А в...

Перенос массива из класса события в другой класс события
есть вот такой код: private void button_follow_Click(object sender, EventArgs e) { ...

Для чего использовать ключевое слово event в объявлении события, если события — это те же самые делегаты
Господа, скажите пожалуйста, для чего использовать ключевое слово event в объявлении события, если...


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

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

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