Когда мы говорим, что шаблоны генерируют больший код, мы имеем в виду, что они больше по сравнению с другими формами динамического или статического полиморфизма, такими как виртуальные функции, указатели на функции, выбор, перегрузка функций и т. Д. *
Например, давайте предположим, что у вас очень большой шаблон класса и только в одном месте кода есть разница между int
и float
. Что ж, наивный компилятор продублирует весь класс и код, и в итоге он получит вдвое больший размер (на самом деле это не так, но давайте предположим, что в этом примере). Если вы только что перегрузили этот единственный метод, дублировалась бы только эта часть кода.
Это также имеет неприятный побочный эффект, заключающийся в увеличении времени компиляции, поскольку он должен оценивать вдвое больше кода.
Следует помнить, что каждый раз, когда для кода шаблона используется новый тип, весь код восстанавливается вместе с новым типом, в то время как другие методы могут просто переключать указатели здесь и там.