C++ предлагает несколько парадигм программирования, как вы обнаружили, и они не являются исключительными.
То, что вы пишете с помощью шаблонов, обычно может быть написано с помощью объектно-ориентированных кодов, поэтому обычно это вопрос компромисса.
Шаблоны C++ следуют парадигме общего программирования, идея состоит в том, что ваш класс/метод будет работать с любым типом, если экземпляры этого типа следуют за Concept
.
Первое поразительное различие в отношении объектно-ориентированного кода состоит в том, что нет необходимости в общем базовом классе. Фактически, комбинируя шаблоны и бесплатные функции, вы можете эффективно работать с гетерогенным набором объектов.
Именно поэтому, когда они светят:
- Если у вас есть разнородный набор объектов, с которыми вы хотите работать
- Если рефакторинга их не представляется возможным (по разным причинам)
, то использование шаблона кажется очень хорошей идеей.
Вообще говоря, я в основном создавал их либо для небольших утилит, либо для фреймворков. В «бизнес-коде» я их использую, но я редко определяю новые.Например:
box::Enum<typename EnumType>
который обертывание перечислимого апа предлагает бесшовное преобразование в/из строки (полезно для симпатичной печати в журналах), сериализации и т.п.
box::Identifier<typename T>
который оборачивает целое (по существу) и позволяет мне создать иерархию типов идентификаторов, аналогичных иерархии типов, так что DummyObjectId
может быть передан, когда можно было бы ожидать ObjectId
, но не наоборот
в общем, есть, следовательно, в которых две ситуации Я использовал шаблоны:
- предотвращение копирование/вставки
- повышения безопасности Типа
Если вы нашли себя в одном из них, возможно, могли бы вы об этом думает.
IMHO Я нахожу это очень хорошей практикой для повторной реализации материала, который уже существует! – Muggen 2010-12-01 14:37:19
@ Muggen Действительно. На мой взгляд, плохо использовать что-то, когда вы не знаете, как это работает. – Maxpm 2010-12-01 14:46:19
@Muggen, @Maxpm: Я согласен с тем, что неплохо попытаться повторно реализовать «материал, который уже существует», чтобы понять, как он работает и на практике. Я сделаю это. Но мой вопрос - когда вы пишете шаблоны в «реальности», а не на практике? – AudioDroid 2010-12-01 15:09:28