Size: a a a

2021 July 08

 P

 ‌‌Gleb Pilipets... in supapro.cxx
а какой тогда правильный паттерн?
источник

AS

Anatoly Shirokov in supapro.cxx
Шаблон делать достоянием общественности
источник

AS

Anatoly Shirokov in supapro.cxx
Чтобы можно было проинстанцировать шаблон с любым типом и не парится если для специализация или нет.
источник

АК

Александр Караев... in supapro.cxx
Это антипаттерн, если шаблон должен работать с любыми типами. Если же множество типов заранее известно и ограничено, то в этом сплошные плюсы
источник

АК

Александр Караев... in supapro.cxx
Например, если реализация тянет кучу зависимостей.
источник

d

d7d1cd in supapro.cxx
Хм... То есть, TU скомпилится, даже если не видит реализации шаблона? Тогда непонятно какой смысл от extern template...
источник

AS

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

АК

Александр Караев... in supapro.cxx
TU не нужна реализация. Она нужна линкеру
источник

d

d7d1cd in supapro.cxx
Это я уже понял. Непонятно для чего в языке extern template тогда.
источник

AS

Anatoly Shirokov in supapro.cxx
это техника называется сокрытие реализации шаблона, имеет узкое применение только для предопределенного множества заранее известных типов.
источник

AB

Aleksei Budyakov in supapro.cxx
В каком случае перед вызовом метода пишут template ?
вроде object-> template method_name()
источник

d

d7d1cd in supapro.cxx
Но ведь и без этого можно скрыть реализацию. Александр выше показал как.
источник

AS

Anatoly Shirokov in supapro.cxx
источник

AS

Anatoly Shirokov in supapro.cxx
пример с knowhow, где реализация шаблона скрыта
источник

AS

Anatoly Shirokov in supapro.cxx
Саша показал как скрывать.
источник

 P

 ‌‌Gleb Pilipets... in supapro.cxx
ну можно, да, но если имплементациия шаблонная будет в хедере, то это не сработает - если тогда добавить extern template в другом .cpp без инстанциирования, то сработает
источник

d

d7d1cd in supapro.cxx
Да, именно!!! И он не использовал extern template
источник

AS

Anatoly Shirokov in supapro.cxx
но, повторю, эта техника имеет существенные недостатки: органиченное множество типов и разбухание кодовой базы за счет явного инстанцирования всех членом шаблона класса без разбора. второй недостаток нивелируется статической линковкой, а вот при динамической - жопа
источник

AS

Anatoly Shirokov in supapro.cxx
поэтому, если при прочих равных вы создаете шаблон и не хотите влезать в эти дебри, то пишите все в хедере и потомки вас не проклянут.
источник

AS

Anatoly Shirokov in supapro.cxx
а так, если ваши коллеги знают ваш домашний адрес, а вы замутили сокрытие шаблонов, то сон ваш будет нездоровым
источник