Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.61/18: Рейтинг темы: голосов - 18, средняя оценка - 4.61
6 / 6 / 3
Регистрация: 06.02.2013
Сообщений: 71
1

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

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


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

Как корректно передать в метод шаблонного класса объект шаблонного класса в качестве параметра?
header.h template &lt;class T&gt; class MyVector { public: void swap(MyVector&lt;T&gt;Vector); }...

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

Инициализация шаблонного класса(В конструкторе класса после двоеточия вновь имя класса)
Всем доброго времени суток! Пытаюсь разобраться как работает приведенный мной код. Конкретно,...

Возможно ли создание объекта шаблонного класса в функции этого класса?
Доброго времени суток, уважаемые форумчане :) Мне по лабам задали задание - реализовать шаблон...

4
Эксперт С++
5042 / 3103 / 271
Регистрация: 11.11.2009
Сообщений: 7,047
14.02.2013, 11:42 2
Свести объявление и реализацию в один файл, не?
0
6 / 6 / 3
Регистрация: 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" типы.
Конечно убежден, что это неуклюжее и далеко не лучшее решение ...
0
62 / 62 / 16
Регистрация: 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
Регионы удобно сворачиваются в одну строчку, так что проблем с навигацией не бывает.
0
6 / 6 / 3
Регистрация: 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
и т.д. А там регионы по моему работают. Надо переходить, если она, конечно, нормально работает.
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
10.03.2013, 13:57

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь или здесь.

Чем отличается шаблонный метод класса от шаблонного класса?
Чем отличается шаблонный метод класса от шаблонного класса???????ПЛИЗ!!!!Если можно немного ссылок...

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

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

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


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

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

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