Войти
ПрограммированиеФорумОбщее

Как вынести конструктор из декларации шаблонного класса? (2 стр)

Страницы: 1 2 3 Следующая »
#15
14:24, 10 сен. 2019

Ghost2
Да в принципе неважно.
Специализацию спокойно можно выносить.
Реализацию (со скрипом) тоже можно.


#16
14:37, 10 сен. 2019

oxotnik
> Меня забавляют люди, говорящие, что "Невозможно написать реализацию класса
> шаблона в отдельном файле cpp и скомпилировать"
А чего ж тогда у меня не компилится?

Ты бы вместо того, чтобы ядом плеваться, объяснил бы нам, убогим, как правильно жить.

#17
(Правка: 15:03) 15:01, 10 сен. 2019

[sarcasm_mode]А чего ж тогда у меня  компилится?[/sarcasm_mode]

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

1. Не стоит в плюсах оперировать понятием файла, а использовать термин "единица трансляции". А то ведь можно и #include <template.cpp> сделать. И гордиться, что вынес реализацию в отдельный cpp файл.
2. Реализацию шаблонного класса частично можно вынести в отдельную единицу трансляции

#18
16:36, 10 сен. 2019

oxotnik
> Реализацию шаблонного класса частично можно вынести в отдельную единицу
> трансляции
Как?

#19
17:18, 10 сен. 2019

Robotex
> Как?
Заинстанциируй нужные шаблоны в этой единице трансляции, и будет тебе счастье.

#20
17:34, 10 сен. 2019

pahaa
ага. именно так и можно

+ в случае dll нужно через externы делать

#21
2:20, 11 сен. 2019

Так кто-то все таки попутал или как?

#22
12:10, 11 сен. 2019

Ghost2
> Так кто-то все таки попутал или как?
Да кто его знает... Так-то и реализацию специализации можно в cpp вынести, так что особой разницы, вроде как, нет ))

#23
12:13, 11 сен. 2019

pahaa
> Заинстанциируй нужные шаблоны
Т.е. прописать все возможные типы? Спасибо, но мы лучше и дальше в хедерах будем шаблоны писать

#24
13:11, 11 сен. 2019

Robotex
> Т.е. прописать все возможные типы?
Если человек не понимает, что ему нужно, то он может пытаться и все возможные типы прописать. Но чаще всего программисты понимают, что и зачем они делают, поэтому таких глупых вопросов не возникает. И уж тем более, отсутствие понимания не является поводом для того, чтобы вводить других людей в заблуждение фразочками вроде
Robotex
> никак. Темплейт должен быть реализован в том же файле, в котором объявлен

#25
(Правка: 14:02) 14:01, 11 сен. 2019

pahaa
> чаще всего программисты понимают, что и зачем они делают

Окей, поясню на пальцах. У меня есть шаблоны контейнеров: QuadTree, ObjectPool, LoopBuffer. С помощью параметра туда может быть передано ВСЕ ЧТО УГОДНО. Мне абсолютно похеру, что там будет хранить пользователь - структура схавает все.

Так что я понятия не имею какие типы там будут использоваться и более того, ФИЗИЧЕСКИ НЕВОЗМОЖНО узнать и прописать их все.


Из этого следует, что таки невозможно разделить реализацию шаблона на хедер и сурс.


А то поначитались умных слов...

#26
(Правка: 14:33) 14:32, 11 сен. 2019

Robotex

ложим всю реализацию в .cpp файл

в хедере в самом низу пишем #include "implemetation.cpp"

профит? реализацию шаблона на хедер и сурс оказывается можно разделить.

А вот засунуть в разные еденицы трансляции, не зная, какой там будет тип, уже сложно

В случае, когда возможные типы шаблона (и даже наборы типов) известны заранее, то это уже не проблема.

#27
14:37, 11 сен. 2019

oxotnik
> ложим всю реализацию в .cpp файл
>
> в хедере в самом низу пишем #include "implemetation.cpp"
Ок, так можно. Но зачем? Все равно шаблон остается в том же самом файле, в котором он объявлен. И все равно этот cpp придется прилагать к библиотеке

#28
14:38, 11 сен. 2019

oxotnik
> когда возможные типы шаблона (и даже наборы типов) известны заранее, то это уже
> не проблема
Ну с этим проблем и не было никогда. От шаблона наследуюсь с нужным параметром и реализую уже как обычный класс.

#29
15:10, 11 сен. 2019

Robotex
так иногда удобнее делать что бы не засорять имлементацией хедер файл. Для библиотек самое то. Только расширение другое юзать

Вариант с наследованием не понял. Как это позволяет избавиться от имлементации в заголовочных файлах?

Страницы: 1 2 3 Следующая »
ПрограммированиеФорумОбщее