Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.71/7: Рейтинг темы: голосов - 7, средняя оценка - 4.71
9 / 9 / 7
Регистрация: 23.11.2012
Сообщений: 94

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

20.02.2014, 20:18. Показов 1557. Ответов 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
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
20.02.2014, 20:18
Ответы с готовыми решениями:

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

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

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

3
Неэпический
 Аватар для Croessmah
18149 / 10731 / 2067
Регистрация: 27.09.2012
Сообщений: 27,035
Записей в блоге: 1
20.02.2014, 20:22
Читайте о указателях на функции и на функции-члены класса
0
9 / 9 / 7
Регистрация: 23.11.2012
Сообщений: 94
20.02.2014, 20:49  [ТС]
Указатель на функцию:
C++
1
void (*ptr)(void);
Указатель на метод:
C++
1
void (SimpleCommand::*ptr)(void);
Вопрос тот же. Что делает этот тайпдеф и как его используют потом. Я не понимаю.

Добавлено через 8 минут
Кажется я понял что к чему. этот тайпдеф определяет тип указателя на метод и называет его Action и таким образом создает переменную указатель этого типа Action _action; а затем вызывает этот метод у объекта Receiver, так?
0
19500 / 10105 / 2461
Регистрация: 30.01.2014
Сообщений: 17,816
20.02.2014, 21:10
Цитата Сообщение от fuzzytoozy Посмотреть сообщение
Кажется я понял что к чему. этот тайпдеф определяет тип указателя на метод и называет его Action и таким образом создает переменную указатель этого типа Action _action; а затем вызывает этот метод у объекта Receiver, так?
Да, все так. Только один маленький момент, тайпдеф не создает тип, он определяет псевдоним уже существующему. Это важно, например для понимания почему используя тайпдеф нельзя перегрузить функцию:
C++
1
2
3
4
typedef int my_int;
 
void foo(int);
void foo(my_int); // одна и та же функция, нет перегрузки
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
20.02.2014, 21:10
Помогаю со студенческими работами здесь

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

Нюансы синтаксиса: объяснить использование ключевого слова typedef в заданном фрагменте кода
Всем привет. Недавно на просторах интернета столкнулся с таким кодом: typedef double(*pointFunc)(double); double f(double x) { ...

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

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

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


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

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru