ПК-ностальгия
HOME
Железо
Программы
Оборудование
Статьи и публикации
Фототаблица
Ссылки
Почта
Гостевая
ПОИСК
Новости Яndex
О сайте

Этот сайт предназначен, прежде всего, людям, ностальгирующим по ушедшим РУССКОМУ СЛОВУ, Windows 3.1, ФОТОНУ, процессорам 486SX и иже с ними.
Конечно, времена должны идти вперед, но почему они обязательно должны уходить?

StuhlbergR 2007-2008 ©
ПРАКТИКУМ
Новое ключевое слово "template" в Borland C++ 3.0

Д.Н. Рассохин

Использование шаблонов функций и классов, ставшее возможным в версии Borland C++ 3.0, избавит программиста от рутинной работы и придаст программам элегантность. <...>

В новой версии компилятора Borland C++, помимо других впечатляющих усовершенствований, наконец-то, задействовано ключевое слово "template" (образец или шаблон), которое ранее было "зарезервировано для будущего использования". Как же использование шаблонов может облегчить тяжкий труд программиста, работающего на С++?

При создании программ на Си++ довольно часто приходится писать множество почти одинаковых фрагментов текста для обработки данных разных типов. Используя ключевое слово "template", можно задать компилятору образец, по которому он сам сгенерирует то, что нужно для каждого из конкретных типов. В Си++ можно использовать шаблоны функций (funktion templates) и шаблоны классов (class templates).


Шаблоны функций
Рассмотрим небльшую прогрмму (см. листинг 1), которая использует функцию swap, обменивающую значения двух переменных. К слову сказать, эта функция - настоящая "рабочая лошадка", которая вместе со своей верной подругой - функцией max - кочует из одного руководства по программированию в другое.

Как видите, один короткий фрагмент программы непринужденно пораждает три различные функции swap ("перегруженные" - "overloaded" по терминологии Си++), работающие с объектами различных типов. Конечно, в некоторых случаях для подобных целей можно использовать макроопределения, но это далеко не так изящно, а кроме того, впоследствии может довести программиста до белого каления при отладке программы.


Шаблоны классов
Шаблоны классов называют также "генераторами классов", (class generators) или "обобщенными классами" (generic classes). Они позволяют определить структуру семейства классов, по которой компилятор создает классы в дальнейшем, основываясь опять-таки на типах используемых данных. Наиболее показательный пример в данном случае - это создание семейства "вмещающих" (container) классов, например векторов (листинг 2).

И в этом случае применение template избавляет от лишней работы и делает программу изящной и компактной.


Куда помещать определения шаблонов в многомодульных программах
При перемещении определений шаблонов возможны два подхода, требующие задания различных опций при компиляции. Если используется компилятор, запускаемый из командной строки DOS, опция устанавливается с помощью переключателя семейства "-Jg"; в интегрированной среде для ее установки служат кнопки-переключатели в соответствующем диалоговом окне (Options - Compiler - C++ options... - Template Generation).

Наиболее удобный способ - это поместить тело функции (в случае шаблона функции) или определения функции-членов и статистических данных (в случае шаблона класса) в заголовочный фацл, который следует включить во все модули проекта, где используется данный шаблон, и установить режим компиляции Smart (соответствующий переключатель командной строки - "-Jg" - значение, принятое по умолчанию). Компилятор при этом генерирует код для всех впервые встречающихся экземпляров, соответствующих данному шаблону. Компоновщик в процессе работы распознает одинаковые экземпляры и помещает в исполняемый файл только одну копию соответствующего кода.

Второй вариант - использовать возможность генерации компилятором внешних ссылок (external references) на экземпляры, соответствующие данному шаблону (режим External, переключатель "-Jgx"). В этом случае при компиляции какого-либо одного модуля для входящего в него экземпляра должно быть сгенерировано общедоступное определение (public definition). Этот модуль компилируется в режиме Global (переключатель "-Jgd")

Автор благодарит Валерия Кориненко за ценные замечания при обсуждении статьи.

ОБ АВТОРЕ
Дмитрий Николаевич Рассохин - сотрудник лаборатории функциональной химии Химического факультета МГУ.

Статья была опубликована в журнале "Мир ПК" №5/1992 г.


ПРОГРАММЫ

Большинство предоставленного здесь материала является цитированием со старых номеров компьютерных журналов, таких, как "Мир ПК" или "Весь Компьютерный Мир". К сожалению, все мои попытки связаться с этими изданиями по поводу вопроса о цитировании были безуспешны. Издания упорно хранили молчание. Что я разрешил себе расценивать как знак согласия, указывая, тем не менее, повсюду как выходные данные издания (с работающей ссылкой на Интернет-представительство), так и автора публикации. Тем более, что, в силу срока давности этих публикаций, вряд ли материал можно рассматривать как коммерческий или рекламный, пусть даже названия фирм здесь и присутствуют (уж без этого никуда). Ежели появятся какие претензии по оному поводу, прошу издания связаться со мной

Райво Штулберг


Rambler's Top100

Рейтинг@Mail.ru Портал HotINDEX: знакомства, товары, хостинг, создание сайта, Интернет-магазин, развлечения, анекдоты, юмор, эротика, погода, курсы валют и многое другое! Сайт Татьяны Полукаровой Яндекс цитирования Каталог Ресурсов Интернет
Белый каталог сайтов Литературное ДАО Практическая педагогика. Авторский сайт Штулберг Надежды Васильевны

Автор обращает внимание на то, что никакой представленный здесь материал не служит рекламным целям ни фирм,ни их продкутам, а носит сугубо информационно-образовательный характер