Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
fuzzytoozy
9 / 9 / 7
Регистрация: 23.11.2012
Сообщений: 94
#1

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

20.02.2014, 20:18. Просмотров 435. Ответов 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
Объясните пожалуйста для чего тут typedef и как pf(j) связан с функцией double...

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

Нюансы синтаксиса: использование typedef
typedef int(*compare_func)(void* left, void* right); В первых круглых скобках...

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

Typedef void F(); typedef для типа функции через идентификатор
Здравствуйте цитата из typedef MSDN в интернете мне удалось нарыть только...

Typedef
Наткнулся на пример ниже: typedef char *cstring; //Каков тип переменной...

3
Croessmah
++Ͻ
14161 / 8086 / 1513
Регистрация: 27.09.2012
Сообщений: 19,926
Записей в блоге: 3
Завершенные тесты: 1
20.02.2014, 20:22 #2
Читайте о указателях на функции и на функции-члены класса
0
fuzzytoozy
9 / 9 / 7
Регистрация: 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
7518 / 4514 / 1097
Регистрация: 30.01.2014
Сообщений: 7,362
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
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
20.02.2014, 21:10
Привет! Вот еще темы с решениями:

typedef
Доброго времени суток, уважаемые программисты! Не могу понять несколько строк...

typedef в c++
Здравствуйте! Нужно собрать полную информацию по оператору typedef в c++....

Typedef
Доброго времени суток. Привожу вам отрывок из книги &quot;C и Visual C++ 2008 для...

typedef
double f(double x){ } typedef double (*TPF)(double); TPF fff = f;...


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

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

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