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

Не понимаю CALLBACK - C++

Восстановить пароль Регистрация
 
atomohod
 Аватар для atomohod
20 / 20 / 1
Регистрация: 01.04.2010
Сообщений: 57
06.11.2011, 20:08     Не понимаю CALLBACK #1
Всем привет!

Помогите пожалуйста разобраться: хочу в коснтрукторе объекта передавать указатель на функцию этого объекта и потом вызывать этот 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
29
30
31
enum Errors { DivBy0, Negative };
 
 
class CalculatingError
{
 
public: 
    CalculatingError(Errors error);
    ~CalculatingError();
    void NegativeError();
    void DivBy0Error();
 
    void (*Error)(void);
}
 
CalculatingError::CalculatingError( Errors error)
{
    switch(error)
    {
    case Errors::DivBy0:
        {
            Error = (void*)DivBy0Error;
        }
        break;
    case Errors::Negative:
        {
            Error = (void*)NegativeError;
        }
        break;
    }
}
в чем ошибка?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
06.11.2011, 20:08     Не понимаю CALLBACK
Посмотрите здесь:

Для чего нужны callback-функции C++
C++ Callback функция
CALLBACK. Нужна помощь C++
Что такое CALLBACK функция...... C++
Методы класса как callback функции C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Lucky_spirit
2 / 2 / 1
Регистрация: 10.05.2012
Сообщений: 45
12.06.2012, 16:11     Не понимаю CALLBACK #2
А какая хоть ошибка? Что компилятор выдает?
Nick Alte
Эксперт С++
1590 / 982 / 115
Регистрация: 27.09.2009
Сообщений: 1,897
Завершенные тесты: 1
12.06.2012, 16:40     Не понимаю CALLBACK #3
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
29
30
31
enum Errors { DivBy0, Negative };
 
 
class CalculatingError
{
 
public:
    CalculatingError(Errors error);
    ~CalculatingError();
    void NegativeError();
    void DivBy0Error();
 
    void (CalculatingError::*Error)(void);
};
 
CalculatingError::CalculatingError( Errors error)
{
    switch(error)
    {
    case DivBy0:
        {
            Error = &CalculatingError::DivBy0Error;
        }
        break;
    case Negative:
        {
            Error = &CalculatingError::NegativeError;
        }
        break;
    }
}
Lucky_spirit
2 / 2 / 1
Регистрация: 10.05.2012
Сообщений: 45
12.06.2012, 18:58     Не понимаю CALLBACK #4
Nick Alte, можете мне, как новчику, посоветовать какую-то хорошую статью по Callback-ам? Я разобрался с тем, как они происходят. А вот практическое применение? Можно какие-то легкие примеры для новичков?
На данный момент работаю "джуниором" и в одном из проектов нужно использовать Callback-функции. Это связано с сокетами, чтением/записью по ним. И вот как callback-функции применяются для отслеживания событий я еще не понял.
DU
1477 / 1053 / 45
Регистрация: 05.12.2011
Сообщений: 2,279
12.06.2012, 19:07     Не понимаю CALLBACK #5
Поищите в сети и почитайте статьи по паттернам проектирования:
Комманда (Command)
Наблюдатель (Observer)
Можно вот в этой книжке: http://ru.wikipedia.org/wiki/Design_Patterns
Самый простой пример:
Когда пишут ГУИ приложение, часто на нажатие кнопки нужно как-то реагировать.
В ГУИ библиотеке есть класс кнопка, которая умеет рисовать себя, обрабатывать всякие системные вызовы и в том числе умеет узнавать, что ее нажали. Но что делать при этом нажатии такой класс не знает. А знает тот, кто эту кнопку создал. Вот для этого в эту кнопку добавляется специальный коллбек, команда или называйте как хотите. Так вот когда кнопка понимает, что ее нажали, она вызывает команду, которую в нее добавили. Ну и в результате выполняются всякие нужные действия. Т.е. кнопка отслежывает событие того, что ее нажали и вызывает в ответ на это зарегестрированный в ней коллбек.
В описанной схеме кнопка является наблюдателем за собитыем "нажатие". И когда нужное событие происходит, происходит вызов заданной комманды (это может быть как коллбек, так и другие реализации)
Yandex
Объявления
12.06.2012, 19:07     Не понимаю CALLBACK
Ответ Создать тему
Опции темы

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