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

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

Войти
Регистрация
Восстановить пароль
 
Okonenko Stanis
6 / 6 / 1
Регистрация: 06.02.2013
Сообщений: 71
#1

Инстанцирование шаблонного класса - C++

11.02.2013, 15:42. Просмотров 1056. Ответов 4
Метки нет (Все метки)

Уважаемые форумчане! Помогите в не сложном, как я полагаю, для Вас вопросе. Имеется шаблонный
класс-контейнер оформленный в виде модуля (два файла: файл интерфейса "name.h" и файл реализации
"name.cpp"). При его использовании нужно каждый раз лезть в его файл реализации "name.cpp" и
вбивать туда явное инстанцирование на те типы данных, с которыми данный класс-контейнер будет
использоваться. Что-то типа:
// явное инстанцирование шаблонного класса на тип данных - int.
template
class TCls<int>
// явное инстанцирование шаблонного класса на тип данных - double.
template
class TCls<double>
Это очень не удобно, тем более, если данный класс-контейнер сам в свою очередь ссылается на другие
шаблонные классы. Ведь тогда надо лезть и вбивать явное инстанцирование и в эти шаблонные классы!
Можно ли как-ни-будь избавиться от этого неудобства? И что такое неявное инстанцирование
шаблонного класса? Где можно почитать об этом пояснее? Заранее всем благодарен!
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
11.02.2013, 15:42     Инстанцирование шаблонного класса
Посмотрите здесь:

Специализация шаблонного класса - C++
Здравствуйте ! Задача: нужно &quot;вытянуть&quot; тип переменной из списка аргументов конструктора (см. текст). Возможно ли, вообще, такое ?...

Обявление шаблонного класса - C++
Как-то с пониманием С++ вроде уже все норм, осталась только одна тема немного темная - шаблоны, вроде бы и понимаю как они работают да и...

Реализация шаблонного класса - C++
List_Node.h: #ifndef _List_Node_H #define _List_Node_H template &lt;class Type&gt; class ListNode { public: Type...

Создание Шаблонного класса - C++
Здравствуйте! Столкнулся с проблемой создания шаблона для класса. Не могу понять как ввести более одного символа если объявляю шаблон для...

Объявление шаблонного класса - C++
Как объявить шаблонный класс?

Разработка шаблонного класса-контейнера - C++
Помогите пожалуйста разобраться! решаю задачу и не могу найти солюшен, всё очень просто, вот задача: Необходимо разработать класс...

Проблема наследования от шаблонного класса. - C++
Привет всем! У меня есть шаблонный класс, и наследуемый от него шаблонный класс. Базовый: #include &quot;Lgraph.h&quot; #include...

итератор для шаблонного класса - C++
Всем солнца! Честно честно честно пересмотрел более 100 различных вариантов разных решений. НО.... :wall: есть список: ...

указатель на экземпляр шаблонного класса - C++
имеется такой класс template &lt;class Coord&gt; class Elem { private: const Coord x, y; Elem *Prev; bool check; public: ...

Вызов конструктора шаблонного класса - C++
Есть шаблонный класс стек, он является полем в классе Express, но компилятор выдает ошибку &quot; Ошибка 1 error C2614: Express: недопустимая...

Конструктор копирования шаблонного класса - C++
Всем доброго времени суток! Язык С++ изучаю относительно недавно и столкнулся с задачей, которую не могу решить. Описываю шаблонный класс...

Шаблонный оператор не шаблонного класса - C++
Пытаюсь создать альтернативный оператор выделения памяти для своей библиотеки. С целью получить возможность передавать дополнительную...


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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
silent_1991
Эксперт С++
4960 / 3036 / 149
Регистрация: 11.11.2009
Сообщений: 7,027
Завершенные тесты: 1
14.02.2013, 11:42     Инстанцирование шаблонного класса #2
Свести объявление и реализацию в один файл, не?
Okonenko Stanis
6 / 6 / 1
Регистрация: 06.02.2013
Сообщений: 71
09.03.2013, 10:18  [ТС]     Инстанцирование шаблонного класса #3
Огромное Вам спасибо silent_1991! Помогли мне разобраться в этом вопросе. Да, оформление Шаблонного Класса в виде одного заголовочного файла, видимо, решает проблему! Вы помогли мне понять смысл всего этого. Именно так написан STL. Хотя в случаях, когда Шаблонный Класс разрастается до внушительных размеров, это и не очень удобно,
в смысле трудности навигации по большому файлу.
Я же, задавая вопрос, скорее имел в виду какой-либо "хитрый прием". Сам я для себя придумал такую методику:
- Во все файлы реализации используемых в проекте Шаблонных Классов (в самую нижнюю их часть) включаю примерно такой текст:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
//--------------------------------------------------------------------------------------------
// включение файла инстанцирования.
#include    "Cls.ins" // файл инстанцирования.
 
// явное инстанцирование на "Тип Данных 0".
template
class    TCls<DATA_0_TYPE>;
// явное инстанцирование на "Тип Данных 1".
template
class    TCls<DATA_1_TYPE>;
// явное инстанцирование на "Тип Данных 2".
template
class    TCls<DATA_2_TYPE>;
//--------------------------------------------------------------------------------------------
    - В файле-же инстанцирования "Cls.ins" имеется примерно такой текст:
//--------------------------------------------------------------------------------------------
//##### ТИПЫ ЯВНОГО ИНСТАНЦИРОВАНИЯ. #####
// "Тип Данных 0" (для явного инстанцирования).
#define    DATA_0_TYPE    int         //(используется.)
// "Тип Данных 1" (для явного инстанцирования).
#define    DATA_1_TYPE    double    //(используется.)
// "Тип Данных 2" (для явного инстанцирования).
#define    DATA_2_TYPE    void       //(НЕ используется.)
//--------------------------------------------------------------------------------------------
Таким образом во всех используемых в проекте Шаблонных Классах производится явное инстанцирование
на заказанные в файле инстанцирования "Cls.ins" типы.
Конечно убежден, что это неуклюжее и далеко не лучшее решение ...
Desu_Is_A_Lie
62 / 62 / 3
Регистрация: 26.02.2012
Сообщений: 114
09.03.2013, 11:04     Инстанцирование шаблонного класса #4
Цитата Сообщение от Okonenko Stanis Посмотреть сообщение
когда Шаблонный Класс разрастается до внушительных размеров
Если работаете в MSVC, то можно использовать #pragma region %название%:
C++
1
2
3
4
5
/* тут объявление класса */
 
#pragma region Functions: %classname%
/* тут все функции */
#pragma endregion
Регионы удобно сворачиваются в одну строчку, так что проблем с навигацией не бывает.
Okonenko Stanis
6 / 6 / 1
Регистрация: 06.02.2013
Сообщений: 71
10.03.2013, 13:57  [ТС]     Инстанцирование шаблонного класса #5
- Спасибо Desu_Is_A_Lie за регионы! Я вообще-то привык к C++Builder v.6, но насколько я знаю Borland
уже довольно давно выпустил Borland Developer Studio (BDS) - общая среда для Delphi, C++Builder, C#Builder
и т.д. А там регионы по моему работают. Надо переходить, если она, конечно, нормально работает.
Yandex
Объявления
10.03.2013, 13:57     Инстанцирование шаблонного класса
Ответ Создать тему
Опции темы

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