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

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

Восстановить пароль Регистрация
 
fuzzytoozy
8 / 8 / 1
Регистрация: 23.11.2012
Сообщений: 94
20.02.2014, 20:18     Использование Typedef #1
Читал книгу по паттернам и натолкнулся на такой пример в паттерне 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)();
}
Объясните пожалуйста что к чему?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
20.02.2014, 20:18     Использование Typedef
Посмотрите здесь:

typedef C++
typedef C++
typedef в c++ C++
C++ тип typedef
Typedef C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Croessmah
Модератор
Эксперт С++
 Аватар для Croessmah
11811 / 6790 / 767
Регистрация: 27.09.2012
Сообщений: 16,843
Записей в блоге: 2
Завершенные тесты: 1
20.02.2014, 20:22     Использование Typedef #2
Читайте о указателях на функции и на функции-члены класса
fuzzytoozy
8 / 8 / 1
Регистрация: 23.11.2012
Сообщений: 94
20.02.2014, 20:49  [ТС]     Использование Typedef #3
Указатель на функцию:
C++
1
void (*ptr)(void);
Указатель на метод:
C++
1
void (SimpleCommand::*ptr)(void);
Вопрос тот же. Что делает этот тайпдеф и как его используют потом. Я не понимаю.

Добавлено через 8 минут
Кажется я понял что к чему. этот тайпдеф определяет тип указателя на метод и называет его Action и таким образом создает переменную указатель этого типа Action _action; а затем вызывает этот метод у объекта Receiver, так?
DrOffset
6423 / 3797 / 878
Регистрация: 30.01.2014
Сообщений: 6,585
20.02.2014, 21:10     Использование Typedef #4
Цитата Сообщение от fuzzytoozy Посмотреть сообщение
Кажется я понял что к чему. этот тайпдеф определяет тип указателя на метод и называет его Action и таким образом создает переменную указатель этого типа Action _action; а затем вызывает этот метод у объекта Receiver, так?
Да, все так. Только один маленький момент, тайпдеф не создает тип, он определяет псевдоним уже существующему. Это важно, например для понимания почему используя тайпдеф нельзя перегрузить функцию:
C++
1
2
3
4
typedef int my_int;
 
void foo(int);
void foo(my_int); // одна и та же функция, нет перегрузки
Yandex
Объявления
20.02.2014, 21:10     Использование Typedef
Ответ Создать тему
Опции темы

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