Почему повышение так сильно шаблонно? - PullRequest
7 голосов
/ 24 февраля 2009

Есть много мест, где я вижу шаблонный класс и не могу не подумать, почему тот, кто его написал, использовал шаблоны.

Например, класс (ы) мьютекса. Все концепции мьютекса реализованы в виде шаблонов, в которых можно просто создать несколько базовых классов или абстрактных классов с интерфейсом, который соответствует концепции.

редактировать после ответов: я думал о стоимости виртуальных функций, но разве не стоит иногда отбрасывать очень небольшое снижение производительности для лучшего понимания? Я имею в виду, что иногда (особенно с boost) действительно сложно понять шаблонный код и расшифровать ошибки компилятора в результате неправильного использования шаблонов.

Ответы [ 2 ]

20 голосов
/ 24 февраля 2009

Шаблоны могут быть высоко оптимизированы во время компиляции без необходимости использования виртуальных функций. Многие трюки с шаблонами можно рассматривать как полиморфизм во время компиляции. Поскольку во время компиляции вы знаете, какое поведение вы хотите, зачем платить за вызов виртуальной функции каждый раз, когда вы используете класс. В качестве бонуса можно легко встроить много шаблонного кода, чтобы исключить даже самые основные издержки при вызове функции.

Кроме того, шаблоны в C ++ являются чрезвычайно мощными и гибкими - было доказано, что они сами по себе являются полноценным языком. Есть несколько вещей, которые легко сделать с шаблонами, которые требуют гораздо больше работы с полиморфизмом во время выполнения.

3 голосов
/ 24 февраля 2009

Шаблоны позволяют вам сделать общую версию алгоритма. Универсальная версия контейнера. Вам больше не нужно беспокоиться о типах, и то, что вы производите, больше не нужно привязывать к типу. Boost - это коллекция библиотек, которая пытается удовлетворить потребности самых разных людей, использующих C ++ в повседневной жизни.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...