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

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

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

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

23.09.2012, 23:07. Просмотров 1696. Ответов 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 и пр. Объясните пожалуйста, кто в теме или скиньте ссылку, где можно почитать про это на родном - русском языке.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
23.09.2012, 23:07
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Методы класса как callback функции (C++):

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

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

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

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

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

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

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

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

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

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

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

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

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

callback метода класса - C++
Предыстория: нужно последовательно запускать несколько однотипных циклов большой степени вложенности, в теле которых вызывать разные...


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

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

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