2009-02-24 5 views
7

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

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

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

+0

будет хорошим вопросом для этого парня: http://stackoverflow.com/users/5597/anthony-williams (автор boost.thread): p –

+0

Основная философия сообщества C++ заключается в том, что «вы получаете только то, что вы просите ». Проект Boost пытается, как и STL, следовать этой философии, разрабатывая все библиотеки, используя шаблоны. Существует стоимость, хотя, как вы говорите: иногда страдает понимание. Если вам нужна библиотека, которую вы можете более легко понять, возможно, вам стоит взглянуть на библиотеку Qt. Он содержит многое из того, что делает Boost, и многое другое! На мой взгляд, дизайн Qt позволяет широкомасштабную разработку на C++, чего-то Boost полностью не хватает. –

ответ

20

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

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

3

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

Смежные вопросы