514___________________Часть III. Современное программирование на C++
функции вам придется создать самостоятельно, в противном случае шаблоны могут стать для ваших программ источником сплошных огорчений.
Проблемы, вызываемые ненадлежащим определением операции присваивания и конструктора копий, подробно изучены в главе 17. Будьте внимательны: даже если родовой класс или функция корректны, но тип данных определен неадекватно, то проблемы вам гарантированы.
Приемы реализации
Язык C++ совсем не требует от вас написания или использования параметризованных типов. В действительности шаблоны употребляются сравнительно нечасто. Причина этого, скорее всего, кроется не в недостатках шаблонов, а в неопытности программистов.
Есть отличный путь изучения тонкостей разработки и написания шаблонов. Сначала разрабатываются обычные функции и классы для конкретного типа данных, и на нем выполняется отладка. Когда вы будете уверены в надежности вашей реализации, вспомните о существовании шаблонов. Те функции и классы, которые, на ваш взгляд, не должны зависеть от данных, станут вашими подопытными кроликами. Преобразуйте определение функции или класса в шаблон и проверьте его на исходном типе данных. Вашего опыта и знаний уже достаточно для того, чтобы локализовать возможные ошибки. Если вам повезло и фрагмент кода работает как обычно — принимайте поздравления.
Начните с просмотра определений из библиотеки STL
В главе 18 вы получили представление о новой библиотеке STL (Standard Template Library, Библиотека стандартных шаблонов). Пока вы только осваиваетесь — не надо изобретать колесо. Прежде чем двигаться вперед и писать новый шаблон, просмотрите возможности инструментов STL — может быть там найдется то, что вам нужно. Разумеется, дело не в том, что вы не способны этот шаблон разработать, а в том, что библиотеки обычно разрабатываются и отлаживаются одними из лучших программистов мира. Вполне вероятно, что шаблон в STL уже написан, проверен, отлажен и много раз опробован. Разработка программ требует времени и затрат — экономьте на всем, если есть такая возможность.
Сравнение шаблонов с другими идиомами
Шаблоны не являются альтернативой другим средствам C++; напротив, они дополняют друг друга. Взгляните на табл. 19.1. Она напомнит вам те средства языка, которые нами уже изучены и те, которые нам только предстоит изучить; все они прямо поддерживаются реализацией Borland C++.