1 / 1 / 1
Регистрация: 04.12.2010
Сообщений: 67
|
|
1 | |
Реализация шаблонов27.08.2015, 18:47. Показов 3628. Ответов 16
Метки нет (Все метки)
Всем привет! Можно ли как-то реализовывать шаблонный класс в другом файле?
то есть имеем заголовочный файл там задаём сам шаблонный класс вот ну а затем пишем его реализацию в другом месте.. можно ли это как-то реализовать? пробовал делать как с обычными классами ничего не получилось компилятор ругается при инициализации шаблона каким-то типом, что нету такой реализации.. пробовал реализовывать в cpp и hpp и в main подключать только .h пока всё безуспешно.. можно ли это вообще сделать?...
0
|
27.08.2015, 18:47 | |
Ответы с готовыми решениями:
16
Реализация шаблонов underline_type и is_enum Реализация шаблонов класса в инлайн файле Реализация шаблонов класса в инлайн файле запрет шаблонов |
Полярный
476 / 448 / 158
Регистрация: 11.09.2011
Сообщений: 1,156
|
|
27.08.2015, 18:51 | 2 |
ProgRoman, extern в помощь, только скомпилировать и доставить его с библиотекой все равно не получится, все равно нужны будут сорсы.
0
|
196 / 197 / 120
Регистрация: 27.05.2011
Сообщений: 545
|
|
27.08.2015, 18:52 | 3 |
Нынешние реализации компиляторов C++ не поддерживают экспорт шаблонов. Поэтому не получится опредить шаблон в отдельном модуле. Придётся определять шаблон полностью в заголвочном файле.
Да, методы обычных классов, можно реализовывать в отдельном модуле. А вот шаблоны, увы…
0
|
1 / 1 / 1
Регистрация: 04.12.2010
Сообщений: 67
|
|
27.08.2015, 18:58 [ТС] | 4 |
Ок понял спасибо большое!
0
|
1674 / 1046 / 174
Регистрация: 27.09.2009
Сообщений: 1,945
|
|
27.08.2015, 21:31 | 6 |
Ещё можно реализовать шаблоны для некоторого набора параметров (например, для всех числовых типов). Инстанциировать шаблон с другими параметрами (скажем, с длинными числами) не получится, но если подставить правильные - работать будет. В общем-то почти то же самое, как если просто реализовать некий набор обычных классов.
0
|
1 / 1 / 1
Регистрация: 04.12.2010
Сообщений: 67
|
|
01.09.2015, 10:36 [ТС] | 7 |
Большое спасибо так и сделал всё получилось
т.е. у меня шаблонный класс а в конце него просто инклуд с реализацией, которая тоже в заголовочном файле, так всё работает. Добавлено через 6 минут 1. У меня тут возможно глупый вопрос.. но зачем нужна специализация шаблонного класса? она как-то облегчает дальнейшую компиляцию... зачем нужно задавать тип если можно не задавать вот это пока я не уяснил 2. и второй момент как работают шаблонные конструкторы копирования? Нужна ли в данном случае специализация или это как-то иначе реализуется...
0
|
В астрале
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
|
|||||||||||
01.09.2015, 10:48 | 8 | ||||||||||
ProgRoman, Бывает нужна. К примеру std::function работает исключительно с параметром типом функции вида (R(Args...)) и реализуется это только так:
Добавлено через 3 минуты Ну и специализация очень-очень часто используется в метапрограммировании. К примеру мета-функция is_same реализуется так:
1
|
1 / 1 / 1
Регистрация: 04.12.2010
Сообщений: 67
|
|
01.09.2015, 11:07 [ТС] | 10 |
0
|
Неэпический
|
||||||
01.09.2015, 11:11 | 11 | |||||
По сути, шаблонного конструктора копий нет.
0
|
1 / 1 / 1
Регистрация: 04.12.2010
Сообщений: 67
|
|
01.09.2015, 11:35 [ТС] | 12 |
тогда получается для реализации конструктора копирования шаблонного класса правильнее всё таки сразу писать специализированные конструкторы копирования, а не один шаблонный
0
|
В астрале
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
|
|
01.09.2015, 11:36 | 13 |
ProgRoman, Зависит от того, что значит правильно. Если конструктор копии действительно нужен и если нужно конструировать от копии с другим шаблонным параметром - пишем два варианта - шаблонный и не шаблонный, если не нужно, но нужен конструктор копии - пишем конструктор копии, если нужно только конструировать от копии с другим шаблонным параметром - только шаблонный.
0
|
В астрале
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
|
|
01.09.2015, 11:56 | 15 |
Croessmah, Не. Я возможно неверно сформулировал. Действительно нужен - значит нужен определенный пользователем конструктор копии. И в варианте который ты процитировал рассматривается вариант, когда НЕ нужен определенный пользователем конструктор копии (хватает сгенеренного компилятором), но нужно конструировать от объекта того же класса с другим шаблонным параметром.
0
|
Croessmah
|
01.09.2015, 11:57
#16
|
Не по теме: ForEveR, мы друг друга поняли :)
0
|
1 / 1 / 1
Регистрация: 04.12.2010
Сообщений: 67
|
|
01.09.2015, 12:23 [ТС] | 17 |
Огромное спасибо, за разъяснения!
0
|
01.09.2015, 12:23 | |
01.09.2015, 12:23 | |
Помогаю со студенческими работами здесь
17
Каталог шаблонов Экспорт шаблонов Наследование шаблонов использование шаблонов Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |