<<
>>

Родовые подпрограммы в языке C++

Родовые функции в языке С++ называются функциями-шаблонами. Объявления функции-шаблона имеет следующую общую форму: template

- объявление функции, которая может иметь параметры шаблона

Запись в угловых скобках аналогична списку параметров в обычной функции.

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

1. class имя_родового_параметра

2. typename имя_родового_параметра

368

Глава 13. Подпрограммы

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

В качестве примера повторим объявление функции-шаблона, приведенной в подразделе «Параметрический полиморфизм»:

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

Здесь тоже один формальный родовой параметр T и два обычных формальных параметра а и b. По параметру T функция настраивается на тип обрабатываемых данных, а по параметрам а и b — на их значения.

В теле функции использован условный оператор ?, логика работы которого состоит в анализе условия, стоящего слева от знака вопроса, и (при его истинном значении) возврате (в качестве результата) значения первого операнда, стоящего справа от знака вопроса. В противном случае возвращается значение второго операнда, стоящего после двоеточия. По сути, оператор ? моделирует логику работы обычного оператора if-then-else, но имеет «загадочный» внешний вид и лаконичную форму. Он удобен в тех случаях, когда в тексте программы надо указать единственное место появления «условного» результата.

Экземпляры функции-шаблона в языке C++ создаются неявно, при обработке оператора вызова функции. Причем абсолютно неважно, что именно указано в операторе вызова функции: ее имя или ее адрес, полученный с помощью операции &. Например, экземпляр функции-шаблона max в приведенном фрагменте создается дважды — для параметров типа int и типа char соответственно: int а, b, с; char x, y, z; с = max(a, b); z = max(x, y);

Объявим процедуру-шаблон для сортировки массивов любого типа:

Родовые подпрограммы

369

Экземпляр этого шаблона появляется, например, при обработке следующего вызова:

Подпрограммы-шаблоны в языке С++ отдаленно напоминают подпрограммы, в которых типы формальных параметров при вызове динамически связываются с типами фактических параметров. В «динамических» подпрограммах нужен лишь один экземпляр кода, в то время как шаблоны требуют создания (в период компиляции) копии кода для каждого отдельного типа, кроме того, связывание операторов вызова с подпрограммами также осуществляется статически.

<< | >>

Еще по теме Родовые подпрограммы в языке C++:

  1. О языке и методе
  2. Приложение к § 12 О родовых и благоприобретенных имениях
  3. Родовой сценарий
  4. Родовой сценарий
  5. Установки — на естественном языке внутренней речи.
  6. Установки — на естественном языке внутренней речи.
  7. § 12 Имение родовое и благоприобретенное
  8. Формулировать задание внутренней природе организма следует на языке души
  9. Разминка антистрессовая, приемы и спецприемы, целевые установки — на естественном языке «внутренней речи».
  10. Разминка антистрессовая, приемы и спецприемы, целевые установки — на естественном языке «внутренней речи».
  11. § 63 Предмет завещания. – Содержание завещания. – Обсуждение законности распоряжений по аналогии с иностранными учреждениями. – Завещание на родовое имение.
  12. 2. Вещи, определенные родовыми признаками, и индивидуально-определенные вещи
  13. § 40 Наследование в боковой линии. – В каких случаях женщина пользуется правом представления. – Наследование в родовом имении сообразно происхождению имения. – Наследование в благоприобретенном имении. – Предпочтение полнородных неполнородным (ст. 1133–1140).
  14. § 37 Исторический очерк русского наследственного права. – Первые начала наследования по договорам с греками, по Русской Правде и судебникам. – Влияние родового начала и политической борьбы с боярством на постановления о наследстве. – Отличия в наследовании между поместьями и вотчинами. – Образование вдовьей и дочерней части. – Право женщин-родственниц при мужчинах. – Недоумения о праве представления. – Соединение поместий с вотчинами и указ о единонаследии. – Отмена его. – Причины затруднений и
  15. Статья 117. Умышленное убийство матерью своего новорожденного ребенка