Size: a a a

2021 July 08

d

d7d1cd in supapro.cxx
Как Вы собираетесь разделить на хедер и реализацию без extern template?

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

Очевидно, что такой трюк можно сделать лишь для конкретных параметров шаблона. То есть, например, нельзя таким образом разделить объявление и реализацию std::array, так как параметров у это шаблона может быть очень много.

Ну и у этого трюка есть, как бы, минус: класс инстанцируется полностью (все его методы). Если же инстанцирование идёт обычно, из хедера, то в бинарник попадут только используемые методы.
источник

AF

Aidar Fattakhov in supapro.cxx
>в бинарник попадут
Слишком категорично
источник

AF

Aidar Fattakhov in supapro.cxx
Same
источник

D

Danya in supapro.cxx
В С++ не нужно
В С++ this нужно исправить только в ограниченных количествах случаев
источник

D

Dmitriy in supapro.cxx
Что предпочтительнее в качестве простенькой фабрики: статический метод класса или свободная функция?
Я так и не пришёл к окончательному выводу: в зависимости от ситуации и числа вызовов других "внутренних" методов, использую оба варианта...
источник

V

Vuniverse in supapro.cxx
Конструктор
источник

D

Dmitriy in supapro.cxx
Я указал два конкретных варианта :)
источник

V

Vuniverse in supapro.cxx
Простенькая фабрика это конструктор.
источник

V

Vuniverse in supapro.cxx
Остальное это сложненькая фабрика
источник

D

Dmitriy in supapro.cxx
Оба дергаются из DLL, так что прошу отвечать именно на заданный вопрос))
источник

V

Vuniverse in supapro.cxx
Статический метод конечно
источник

V

Vuniverse in supapro.cxx
Если у тебя нету неймспейса для класса
источник

V

Vuniverse in supapro.cxx
А если есть то свободную от класса но в неймспейс
источник

V

Vuniverse in supapro.cxx
Статические методы это синтаксический сахар на самом то деле
источник

V

Vuniverse in supapro.cxx
По красоте просто их юзают и чтобы неймспейсы не создавать лишнии
источник

D

Dmitriy in supapro.cxx
Разберем на примере.
namespace tcp {
class Connection;
}

И свободная функция, и статический метод смотрятся одинаково неплохо
Более того - tcp::MakeConnection() выразительнее, нежели tcp::Connection::Make()...
источник

V

Vuniverse in supapro.cxx
Если есть немспайс - то свободную от класса но в неймпейсе
источник

V

Vuniverse in supapro.cxx
Вот сказал же
источник

D

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

D

Dmitriy in supapro.cxx
Нет, конечно не фабрика потомков в базовом
источник