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

C++

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

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

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

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

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

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

ANSI или UNICODE - C++
Всем привет!!! У меня возникла такая ситуация что использовать в WinApi программирование ANSI или UNICODE, где-то читал, что UNICODE...

работа с символами ANSI (Экзамен) - C++
Здравствуйте! Помогите с написание программы. Нужно вывести таблицу ANSI, с этим вроде получилось, но было бы не плохо если вы...

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

Реализация события без использования VCL - C++
Здравствуйте! В C++ Builder, используя средства VCL, я реализовывал события так: - в h-файле перед объявлением класса пишем: typedef...

Unicode/Ansi - C++ Builder
Доброго! Скорее всего в будущем будет необходимость сделать интерфейс программы на нескольких языках "Рус, Укр, Бел". Ну в программе, все...

Конвертировать Utf 16 в Ansi - C++ Builder
Есть у кого предложения по конвертации utf_16 в ansi? Написанный мною индуский код не устраивает. Функция: const String...

10
asics
Freelance
Эксперт С++
2848 / 1783 / 144
Регистрация: 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
Airhand
502 / 458 / 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
voral
488 / 468 / 79
Регистрация: 16.03.2008
Сообщений: 2,218
30.06.2011, 16:22 #4

Не по теме:


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



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

 Комментарий модератора 
Уважительно относитесь к другим участникам форума.
Правила форума, п. 4.1
0
asics
Freelance
Эксперт С++
2848 / 1783 / 144
Регистрация: 09.09.2010
Сообщений: 3,841
04.07.2011, 15:45 #7
Цитата Сообщение от eugrita Посмотреть сообщение
Тогда, что же в интернете писали брехню?
Просто интересно, а на каком ресурсе вы нашли эту инфу(стосовно указателя на функцию-член) ?
0
xAtom
915 / 740 / 60
Регистрация: 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
grizlik78
Эксперт С++
1966 / 1459 / 120
Регистрация: 29.05.2011
Сообщений: 3,018
05.07.2011, 09:35 #9
xAtom, хм, интересно. Как статическая функция Proc сможет вызвать нестатическую виртуальную функцию DlgMain::OnLeftButtonDown?
0
CheshireCat
Эксперт С++
2895 / 1244 / 78
Регистрация: 27.05.2008
Сообщений: 3,397
05.07.2011, 10:16 #10
http://code.google.com/p/cpp-events/
0
eugrita
3 / 4 / 0
Регистрация: 18.11.2009
Сообщений: 448
05.07.2011, 11:06  [ТС] #11
Да ,вот довольно много написано на rsdn
http://www.rsdn.ru/article/cpp/fastdelegate.xml
Как-то тема затрагивалась (не в контексте "событий" а в контексте call-back -функции ) и на этом форуме
www.cyberforum.ru/cpp-beginners/thread29497.html
Но все равно. Конечно надо уметь и знать случаи применения call-back функций а также знать
и уметь разрабатывать модели с событиями на простом C++
0
05.07.2011, 11:06
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
05.07.2011, 11:06
Привет! Вот еще темы с ответами:

Перевод int в Ansi - C++ Builder
Подскажите пожалуйста как перевести int в Ansistring причем добавлением 1го во второй.ну т.е. мне нужно допустим к Ansistring x; ...

ANSI в TMemo или TRichEdit - C++ Builder
Добрый вечер! Как мне выводить дополнительные символы ANSI. Например. Я введу в TMemo alt+NUM7 и там должно вывестись &quot;○&quot;, но вместо этого...

Запись ANSI строк в файл - C++ Builder
Здраствуйте, помогите разобраться. AnsiString ansi_string = q3map2path-&gt;Text + &quot; -convert -format map &quot; + mappath-&gt;Text; char *str =...

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


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

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

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