Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.67/15: Рейтинг темы: голосов - 15, средняя оценка - 4.67
15 / 13 / 6
Регистрация: 24.02.2014
Сообщений: 93

Указатель на шаблон класса через typedef

01.10.2016, 23:14. Показов 3190. Ответов 15
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте. Возникла следующая проблема: захотел определить указатель на класс с template при помощи typedef, но вываливает ошибку:
Code
1
invalid use of template-name 'ExampleClass' without an argument list typedef ExampleClass * ExampleClassPointer;
Сам код:
C++
1
2
3
4
5
6
template <class T> class ExampleClass
{
//...
};
 
typedef ExampleClass * ExampleClassPointer;
В и-нете нагуглить удалось только методы решения к
typedef ExampleClass ExampleAlias;
и то, что такие конструкции вроде как не допустимы. Тогда хотелось бы варианты путей решения данной проблемы.
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
01.10.2016, 23:14
Ответы с готовыми решениями:

Шаблон класса двусвязного списка, метод, возвращающий указатель
Пишу шаблон класса двусвязного списка. Всё в хедере. В классе присутствует структура item. Пытаюсь написать метод, возвращающий указатель...

Как объявить указатель на массив через typedef и как инициализировать такой тип
Как заставить заработать этот фрагмент кода? INT_L -- указатель на массив из 100 элементов типа char; Не получается в переменную C...

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

15
 Аватар для stzer
140 / 110 / 60
Регистрация: 26.10.2013
Сообщений: 314
01.10.2016, 23:19
C++
1
typedef ExampleClass<YourType>* ExampleClassPointer;
0
19500 / 10105 / 2461
Регистрация: 30.01.2014
Сообщений: 17,816
01.10.2016, 23:24
Цитата Сообщение от neit95 Посмотреть сообщение
Тогда хотелось бы варианты путей решения данной проблемы.
В С++11 можно так:
C++
1
2
template <typename T>
using ExampleClassPointer = ExampleClass<T> *;
1
2549 / 1208 / 358
Регистрация: 30.11.2013
Сообщений: 3,826
01.10.2016, 23:24
neit95, класса ExampleClass больше не сущестует
0
Любитель чаепитий
 Аватар для GbaLog-
3745 / 1801 / 566
Регистрация: 24.08.2014
Сообщений: 6,020
Записей в блоге: 1
01.10.2016, 23:28
Лучший ответ Сообщение было отмечено neit95 как решение

Решение

neit95, В книжке Скотта Майерса видел:
C++
1
2
3
template< class T >
struct test
{ typedef ExampleClass< T >* ExampleAlias; };
Если без С++11.
Только обращаться придётся через структуру, то есть так: test::ExampleAlias
3
19500 / 10105 / 2461
Регистрация: 30.01.2014
Сообщений: 17,816
01.10.2016, 23:31
GbaLog-, если причесать до более классического вида, то примерно так:
C++
1
2
3
4
5
template <typename T>
struct ExampleClassPointer
{
    typedef ExampleClass<T> * type;
};
Использовать так:
C++
1
ExampleClassPointer<int>::type p = ....
0
Любитель чаепитий
 Аватар для GbaLog-
3745 / 1801 / 566
Регистрация: 24.08.2014
Сообщений: 6,020
Записей в блоге: 1
01.10.2016, 23:36
DrOffset, В книге показывалось, как уйма тайпдефоф была там, так что type не подойдёт. Типа все шаблонные классы, которые надо было так тайпдефать, тайпдефали через эту единственную структуру.
0
19500 / 10105 / 2461
Регистрация: 30.01.2014
Сообщений: 17,816
01.10.2016, 23:38
Цитата Сообщение от GbaLog- Посмотреть сообщение
Типа все шаблонные классы, которые надо было так тайпдефать, тайпдефали через эту единственную структуру.
Ну это тоже не всегда хорошо. Принцип единственной ответственности все-таки не зря существует.
1
 Аватар для stzer
140 / 110 / 60
Регистрация: 26.10.2013
Сообщений: 314
01.10.2016, 23:45
Цитата Сообщение от GbaLog- Посмотреть сообщение
Типа все шаблонные классы, которые надо было так тайпдефать, тайпдефали через эту единственную структуру.
Если вы про книгу "Эффективный и современный C++", то там он говорил немного о другом - о шаблонах псевдонимов.

C++
1
2
tеmplate<typename Т>
using МyAllocList = std::list<T, MyAlloc<T>>;
Эквивалентно:
C++
1
2
3
4
5
template<typename Т>
struct МyAllocList 
{
typedef std::list<T, MyAlloc<T>> type;
};
0
2549 / 1208 / 358
Регистрация: 30.11.2013
Сообщений: 3,826
01.10.2016, 23:45
DrOffset, существует ли в вашем кодинг стайле использовать приоритетней using если у типа есть шаблон? Что-то в двух словах: "Шаблон? Только using вместо typedef"
0
Любитель чаепитий
 Аватар для GbaLog-
3745 / 1801 / 566
Регистрация: 24.08.2014
Сообщений: 6,020
Записей в блоге: 1
01.10.2016, 23:51
stzer, Да я уже тоже посмотрел.
C++
1
2
3
4
5
template<typename T>
struct MyAllocList
{
    typedef std::list<T, MyAlloc<T>> type;
};
Значит у какого-то другого видел.

Добавлено через 3 минуты
Хотя нет, сам принцип такой же. А про кучу тайпдефоф, похоже, воображение подыграло.
0
15 / 13 / 6
Регистрация: 24.02.2014
Сообщений: 93
01.10.2016, 23:59  [ТС]
Спасибо. Под мои задачи подойдёт вариант со структурой. Он конечно выглядит костыльнее, нежели через using, но есть определённые шансы, что код будет использоваться в компиляторах до стандарта 11-ого года. Хотя, кажется странным, что такую фичу к typedef'у не прикрутили.
0
2549 / 1208 / 358
Регистрация: 30.11.2013
Сообщений: 3,826
02.10.2016, 00:37
DrOffset, ????
0
19500 / 10105 / 2461
Регистрация: 30.01.2014
Сообщений: 17,816
02.10.2016, 00:40
Цитата Сообщение от rikimaru2013 Посмотреть сообщение
существует ли в вашем кодинг стайле использовать приоритетней using если у типа есть шаблон? Что-то в двух словах: "Шаблон? Только using вместо typedef"
Я не использую С++11 в промышленной разработке.
Поэтому какого-то определенного кодинг стайла, связанного с С++11 у меня нет.
Но исходя из общего понимания вопроса, я бы предпочел вообще отказаться от typedef везде, где не требуется совместимость с Си.
2
Эксперт С++
 Аватар для Mr.X
3225 / 1752 / 436
Регистрация: 03.05.2010
Сообщений: 3,867
02.10.2016, 00:46
Цитата Сообщение от DrOffset Посмотреть сообщение
я бы предпочел вообще отказаться от typedef везде, где не требуется совместимость с Си.
Не знаю, мне вот они кажутся намного более читаемыми, чем юзинги.
0
02.10.2016, 00:55

Не по теме:

Цитата Сообщение от Mr.X Посмотреть сообщение
Не знаю, мне вот они кажутся намного более читаемыми, чем юзинги.
Если бы я хотел об этом подискутировать, то создал бы тему в священных войнах.
Можете на меня не рассчитывать в этом вопросе :)

0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
02.10.2016, 00:55
Помогаю со студенческими работами здесь

Обращение к методам класса через указатель на экземпляр класса
Добрый день. Не могу осилить проблему: Описан абстрактный класс. Описаны наследники этого класса уже без абстрактности. Описан...

typedef и указатель на функцию
Здравствуйте! Помогите пожлауйста с пониманем одного момента... Так вот, есть оператор typedef.Он насколько я понял, обьявляет...

Изменить переменную класса через указатель
В данном примере я получаю указатель на переменную объекта. Я хочу изменить указатель, т.е. не само значение переменной на которую...

Обращение к элементам класса через указатель
Что выполняет в данном случае оператор -&gt; this-&gt;t1 = (gcnew System::Windows::Forms::TextBox()); ? Почему нельзя писать так this.t1...

Создание экземпляра класса через указатель
Просьба помочь разобраться. Есть метод, который должен возвращать экземпляр созданного в нем класса (RecyclerView.ViewHolder). public...


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

Или воспользуйтесь поиском по форуму:
16
Ответ Создать тему
Новые блоги и статьи
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