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

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

Войти
Регистрация
Восстановить пароль
 
fuzzytoozy
8 / 8 / 1
Регистрация: 23.11.2012
Сообщений: 94
#1

Использование Typedef - C++

20.02.2014, 20:18. Просмотров 398. Ответов 3
Метки нет (Все метки)

Читал книгу по паттернам и натолкнулся на такой пример в паттерне command:

C++
1
2
3
4
5
6
7
8
9
10
template<class Receiver>
class SimpleCommand : public Command {
public:
    typedef void (Receiver::* Action)();
    SimpleCommand(Receiver* r, Action a) : _receiver(r), _action(a) {}
    virtual void Execute();
private:
    Action _action;
    Receiver* _receiver;
};
Мне собственно совершенно непонятен тайпдеф что он определяет типом и как это работает. Вообще что такое тайпдеф и как с ним работать я знаю, мне непонятен конкретно этот.
Вот так его в последствии используют:

C++
1
2
3
4
template<class Receiver>
void SimpleCommand<Receiver>::Execute () {
    (_receiver->*_action)();
}
Объясните пожалуйста что к чему?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
20.02.2014, 20:18
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Использование Typedef (C++):

Использование typedef - C++
Объясните пожалуйста для чего тут typedef и как pf(j) связан с функцией double Y???????? Программа: #include &lt;iostream&gt; #include...

Использование typedef с template - C++
Не могу добавить шаблон typedef std::list&lt;QueueElement&gt; cont; typedef cont::iterator It;

Неверное использование typedef в классе ? - C++
Есть код: template&lt;typename type, size_t arr_size&gt; class array { type arr; public: typedef type* iterator; typedef...

Нюансы синтаксиса: использование typedef - C++
typedef int(*compare_func)(void* left, void* right); В первых круглых скобках - &quot;*compare_func&quot; новое имя типа, представляющее указатель...

Typedef - C++
Наткнулся на пример ниже: typedef char *cstring; //Каков тип переменной cstr в следующем объявлении: const cstring cstr; ...

typedef - C++
Сталкнулся с таким объвлением typedef __mpz_struct mpz_t; Не могу врубится что оно значит? ...

3
Croessmah
Ушел
Эксперт CЭксперт С++
13557 / 7707 / 872
Регистрация: 27.09.2012
Сообщений: 18,996
Записей в блоге: 3
Завершенные тесты: 1
20.02.2014, 20:22 #2
Читайте о указателях на функции и на функции-члены класса
0
fuzzytoozy
8 / 8 / 1
Регистрация: 23.11.2012
Сообщений: 94
20.02.2014, 20:49  [ТС] #3
Указатель на функцию:
C++
1
void (*ptr)(void);
Указатель на метод:
C++
1
void (SimpleCommand::*ptr)(void);
Вопрос тот же. Что делает этот тайпдеф и как его используют потом. Я не понимаю.

Добавлено через 8 минут
Кажется я понял что к чему. этот тайпдеф определяет тип указателя на метод и называет его Action и таким образом создает переменную указатель этого типа Action _action; а затем вызывает этот метод у объекта Receiver, так?
0
DrOffset
7377 / 4454 / 1009
Регистрация: 30.01.2014
Сообщений: 7,304
20.02.2014, 21:10 #4
Цитата Сообщение от fuzzytoozy Посмотреть сообщение
Кажется я понял что к чему. этот тайпдеф определяет тип указателя на метод и называет его Action и таким образом создает переменную указатель этого типа Action _action; а затем вызывает этот метод у объекта Receiver, так?
Да, все так. Только один маленький момент, тайпдеф не создает тип, он определяет псевдоним уже существующему. Это важно, например для понимания почему используя тайпдеф нельзя перегрузить функцию:
C++
1
2
3
4
typedef int my_int;
 
void foo(int);
void foo(my_int); // одна и та же функция, нет перегрузки
1
20.02.2014, 21:10
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
20.02.2014, 21:10
Привет! Вот еще темы с ответами:

typedef - C++
Доброго времени суток, уважаемые программисты! Не могу понять несколько строк из примера учебника Дейтела. С первой строкой все понятно,...

Typedef - C++
Доброго времени суток. Привожу вам отрывок из книги &quot;C и Visual C++ 2008 для начинающих&quot;. В книге приведен пример объявления структуры с...

typedef в c++ - C++
Здравствуйте! Нужно собрать полную информацию по оператору typedef в c++. Пока нашел, что typedef используется для задания новых...

typedef - C++
double f(double x){ } typedef double (*TPF)(double); TPF fff = f; fff(10.0); как и почему это работает корректно, если в...


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

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

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