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

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 11, средняя оценка - 4.82
moskitos80
61 / 61 / 10
Регистрация: 04.10.2011
Сообщений: 217
Завершенные тесты: 1
#1

Методы класса как callback функции - C++

23.09.2012, 23:07. Просмотров 1544. Ответов 4
Метки нет (Все метки)

Всем привет. Пытаюсь разобраться как передавать методы класса в качестве callback. Я конечно понимаю, что есть решения вроде Boost или возможности стандарта C++11 но я только начал изучать С++ и эти вещи мне пока не по зубам. В общем, в инете нарыл код, который решает мою проблему, но в нём есть не понятные мне моменты:
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
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
#include <iostream>
using namespace std;
 
class Callee;
 
class Caller {
    public :
        typedef int (Callee::*callType)(int); // Непонятно!
 
        Caller (Callee *obj, callType method) :
            callObj     (obj),
            callMethod  (method)
        {/* empty */}
        int call(int arg)
        {
            return (this->callObj->*this->callMethod)(arg);
        }
 
    protected :
        Callee *callObj;
        callType callMethod;
};
 
class Callee {
    public :
        int someOne (int arg)
        {
            return arg;
        }
        int someTwo (int arg)
        {
            return arg + 50;
        }
};
 
int main()
{
    Callee calle1;
 
    Caller c1(&calle1, &Callee::someOne);
    Caller c2(&calle1, &Callee::someTwo);
 
    cout << c1.call(10) << endl
         << c2.call(10);
 
    return 1;
}
На сколько хватает моих познаний: typedef тип1 псевдоним - это по сути создание псевдонима для типа1, но в коде выше совершенно непонятен синтаксис:
C++
1
typedef int (Callee::*callType)(int);
здесь что: (Callee::*callType)(int) - становиться псевдонимом типа int ? Зачем это делается ? Смутно понимаю, что здесь callType - становиться псевдонимом типа, которым является сама callback - функция...

И ещё краем уха слышал, что опытные программисты в данном случае предпочитают применять статические методы, почему и как это делается? Ведь тогда присутствуют ограничение, как то, что не имеется доступа к this и пр. Объясните пожалуйста, кто в теме или скиньте ссылку, где можно почитать про это на родном - русском языке.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
23.09.2012, 23:07     Методы класса как callback функции
Посмотрите здесь:

For_each и аргументы callback-функции; Как передать callback'у больше одного аргумента - C++
Изучаю контейнеры и алгоритмы stl по Майерсу . С непривычки слегка охренел и запутался в них . В общем есть у меня простой вызов...

Нестатическая ссылка в статичной (BOOL CALLBACK EnumWindowsProc) функции внутри класса - C++
Здравствуйте форумчане приступлю сразу к сути. В чем сущность алгоритма: Нужно собрать RECT всех отображаемых окон и записать в...

Ссылки на функции и методы класса - C++
Всем доброго времени суток! А киньте в меня, пожалуйста, хорошими ссылками на книги или статьи на тему: &quot;Ссылки на функции и методы...

Классы, функции методы класса, наследование - C++
Задание: Объявите класс Tarray, создающий тип &quot;Массив&quot;. Определите элементы-данные класса: - Указатель на область памяти,в которой...

Шаблоны и функторы как callback для класса свойства объекта. Код работает - но не должен - C++
Здравствуйте! Хочу написать реализацию класса свойства на шаблоне. Т.е есть объект, он инициирует необходимые проперти, в графическом...

Создать описание класса, содержащего методы (функции) для вычисления - C++
2.Создать описание класса,содержащего методы(функции) для вычисления и вывода на экран в текстовый файл разницы максимум и минимум из K...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
alex_x_x
бжни
2447 / 1652 / 84
Регистрация: 14.05.2009
Сообщений: 7,162
23.09.2012, 23:19     Методы класса как callback функции #2
Цитата Сообщение от moskitos80 Посмотреть сообщение
(Callee::*callType)(int)
Callee - это класс
callType - это псевдоним некого метода класса Callee, который принимает int и возвращает int

Цитата Сообщение от moskitos80 Посмотреть сообщение
И ещё краем уха слышал, что опытные программисты в данном случае предпочитают применять статические методы, почему и как это делается?
это просто проще, но не всегда можно
например через указатель на метод можно формировать функторы, которые обходят ограничения области видимости

Цитата Сообщение от moskitos80 Посмотреть сообщение
Ведь тогда присутствуют ограничение, как то, что не имеется доступа к this и пр.
можно this передавать в качестве параметра
ProNoooob
72 / 72 / 6
Регистрация: 14.10.2009
Сообщений: 121
23.09.2012, 23:21     Методы класса как callback функции #3
C++
1
typedef int (Callee::*callType)(int);
Тут все просто. Для ТИПА int (Callee::*)(int) вводится псевдоним callType.
Учите синтаксис.

Опытные программисты используют объекты, а не голые указатели на функции.
Ну или лямбды. Хотя лямбды, это объекты в С++.
moskitos80
61 / 61 / 10
Регистрация: 04.10.2011
Сообщений: 217
Завершенные тесты: 1
23.09.2012, 23:30  [ТС]     Методы класса как callback функции #4
А где можно почитать про typedef? А то у Лафоре этой информации не нашёл.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
23.09.2012, 23:38     Методы класса как callback функции
Еще ссылки по теме:

Как реализовать срабатывание Callback функции при событии? - C++
Совсем запутался. Вот есть у меня callback функция предположим. Она принимает своим параметром другую функцию, в которой прописан нужный...

Какими способами можно использовать функции класса B, как параметры функции Sub класса А? - C++
class A {... void Sub(...); ...} class B : ... { public: float f1(float); float f2(float); ...

Создать описание класса, содержащего методы (функции) для вычисления и вывода на экран суммы четных чисел - C++
Задача № 2 Создать описание класса, содержащего методы (функции) для вычисления и вывода на экран и в тестовый файл суммы четных значений...

Методы класса, как лучше записывать - C++
#include &lt;iostream&gt; class variantOne { public: variantOne() { varOne = 0; } variantOne(int a) { varOne = a; } ~variantOne()...

callback функции не для кнопок на экране, а для клавиш на клав. и мышке. Как? - C++
Я так понимаю, что в WIN API все действия делаются асинхронно через callback функции. Но как инициировать действие для клавиш клавиатуры...

Как скомпилировать два класса, которые используют методы друг друга - C++
Доброго времени суток. имеется 3 файлика: asteroid.cpp starsystem.cpp main.cpp в main.cpp файлики инкудятся в следующем...


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

Или воспользуйтесь поиском по форуму:
OhMyGodSoLong
~ Эврика! ~
1243 / 992 / 42
Регистрация: 24.07.2012
Сообщений: 2,002
23.09.2012, 23:38     Методы класса как callback функции #5
Ройте по ключевому слову делегат.
Yandex
Объявления
23.09.2012, 23:38     Методы класса как callback функции
Ответ Создать тему
Опции темы

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