Существует некоторая логика в том, что шаблоны приводят к большему коду.Основная идея довольно проста: каждый экземпляр шаблона создает по существу отдельный код.Это было особенно проблематично с ранними компиляторами - поскольку шаблоны (обычно) должны быть помещены в заголовки, все функции в шаблоне inline
.Это означает, что если у вас есть (например) vector<int>
, созданный в 10 различных файлах, у вас (теоретически) будет 10 отдельных копий каждой используемой вами функции-члена, по одной для каждого файла, в котором вы ее используете.
Любойсравнительно недавний компилятор (скажем, менее 10 лет) будет иметь некоторую логику в компоновщике, чтобы объединить их вместе, поэтому создание экземпляра vector<int>
для 10 файлов приведет к тому, что только одна копия каждой функции-члена, которую вы использовали, попадет в финалисполняемый файл.Что бы там ни было, однако, как только стало «известно», что шаблоны производят раздутый код, многие люди больше не смотрели, чтобы узнать, остался ли он верным.
Еще один момент (который остается верным) заключается в том, чтоШаблоны могут облегчить создание довольно сложного кода.Если вы пишете что-то самостоятельно в C, у вас, как правило, есть сильная мотивация использовать самый простой алгоритм, набор и т. Д., Которые могут выполнить эту работу - достаточно мотивированную, чтобы вы могли проверить детали, например, максимальное число.предметов, с которыми вы можете столкнуться, чтобы увидеть, можете ли вы сойти с рук с чем-то действительно простым.Шаблон может сделать использование коллекции общего назначения настолько простым, что вам не придется проверять подобные вещи, поэтому (например) вы получите весь код для построения и поддержания сбалансированного дерева, даже если вы толькохранение, скажем, не более 10 элементов, поэтому простой массив с линейным поиском сэкономит память и, как правило, будет работать быстрее.