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

C++

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 10, средняя оценка - 4.90
eugrita
3 / 4 / 0
Регистрация: 18.11.2009
Сообщений: 421
#1

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

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

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

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

Мне известно, что вроде в C# появилась поддержка механизма событий. Но я программирую на
C++
Из материалов инета на эту тему приведу цитату
"С++ не поддерживает указатели на функцию-член класса" -
но как-то это связано с этим, но не понимаю.
Если можете, поясните подробно и может с приведением несложных учебных примеров
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
30.06.2011, 13:18     События в ANSI C++
Посмотрите здесь:

Visual C++ ANSI и DrawText
Ansi C.функции C++
C++ ANSI C
Стандарт ANSI C++
C++ ANSI to UCS2 LE
C++ Обработка .txt кодировка ANSI и UTF-8 (буква "я" в ANSI воспринимается как EOF)
C++ ANSI и UNICODE
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
asics
Freelance
Эксперт C++
2842 / 1779 / 144
Регистрация: 09.09.2010
Сообщений: 3,842
30.06.2011, 14:04     События в ANSI C++ #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;
}
Airhand
502 / 458 / 3
Регистрация: 08.07.2009
Сообщений: 2,625
30.06.2011, 15:20     События в ANSI C++ #3
Цитата Сообщение от eugrita Посмотреть сообщение
Прошу прощенья, что не очень внятно формулирую тему. Для меня это познавательный вопрос.
Меня интересует:
1)Можно ли и как в классическом C++ без всяких GUI (C++ Builder, Visual Studio)
использовать механизм событий
Можно конечно юзать собития. Event придумали (не уверен) в с++. А на чём написан C++ Bulder ? На С++

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

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

Не по теме:


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



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

 Комментарий модератора 
Уважительно относитесь к другим участникам форума.
Правила форума, п. 4.1
asics
Freelance
Эксперт C++
2842 / 1779 / 144
Регистрация: 09.09.2010
Сообщений: 3,842
04.07.2011, 15:45     События в ANSI C++ #7
Цитата Сообщение от eugrita Посмотреть сообщение
Тогда, что же в интернете писали брехню?
Просто интересно, а на каком ресурсе вы нашли эту инфу(стосовно указателя на функцию-член) ?
xAtom
913 / 738 / 60
Регистрация: 09.12.2010
Сообщений: 1,346
Записей в блоге: 1
05.07.2011, 05:20     События в ANSI C++ #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, тоже самое что и функции обратного вызова.
grizlik78
Эксперт С++
1898 / 1430 / 106
Регистрация: 29.05.2011
Сообщений: 2,986
05.07.2011, 09:35     События в ANSI C++ #9
xAtom, хм, интересно. Как статическая функция Proc сможет вызвать нестатическую виртуальную функцию DlgMain::OnLeftButtonDown?
CheshireCat
Эксперт С++
2891 / 1240 / 78
Регистрация: 27.05.2008
Сообщений: 3,327
05.07.2011, 10:16     События в ANSI C++ #10
http://code.google.com/p/cpp-events/
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
05.07.2011, 11:06     События в ANSI C++
Еще ссылки по теме:

ANSI to Unicode C++
ANSI to Unicode C++
C++ Wide <--> ansi
Раскодировка ANSI C++
Unicode/Ansi C++ Builder

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

Или воспользуйтесь поиском по форуму:
eugrita
3 / 4 / 0
Регистрация: 18.11.2009
Сообщений: 421
05.07.2011, 11:06  [ТС]     События в ANSI C++ #11
Да ,вот довольно много написано на rsdn
http://www.rsdn.ru/article/cpp/fastdelegate.xml
Как-то тема затрагивалась (не в контексте "событий" а в контексте call-back -функции ) и на этом форуме
www.cyberforum.ru/cpp-beginners/thread29497.html
Но все равно. Конечно надо уметь и знать случаи применения call-back функций а также знать
и уметь разрабатывать модели с событиями на простом C++
Yandex
Объявления
05.07.2011, 11:06     События в ANSI C++
Ответ Создать тему
Опции темы

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