Справочное руководство по языку Ада-83


Конкретизация настройки - часть 3


Кроме того, если в настраиваемом модуле используется предопределенная операция или базовая операция над формальным типом, то в экземпляре используется предопределенная операция, соответствующая фактическому типу, сопоставленному формальному.

Эти же правила применяются к обозначению типа и выражению (по умолчанию) из раздела формальных параметров настройки настраиваемого модуля.

При предвыполнении конкретизации настройки осуществляются следующие действия. Сначала вычисляется каждое выражение, заданное в качестве явного фактического параметра настройки, и каждое выражение, входящее как составная часть в имя переменной или входа, заданное в качестве явного фактического параметра настройки; в языке не определен порядок вычисления этих выражений. Затем вычисляются выражения или имена по умолчанию для тех параметров, для которых опущены сопоставления параметров (если они есть) настройки; эти вычисления производятся в порядке следования описаний формальных параметров настройки. Наконец, предвыполняется неявно сгенерированный экземпляр. Предвыпо-лнение конкретизации настройки может также вызывать проверки некоторых ограничений, как описано ниже.

Рекурсивная конкретизация настройки недопустима в следующем смысле: если данный настраиваемый модуль включает конкретизацию другого настраиваемого модуля, то экземпляр, сгенерированный этой конкретизацией, не должен включать экземпляр первого настраиваемого модуля (независимо от того, генерируется ли этот экземпляр непосредственно или косвенно через промежуточную конкретизацию).

Примеры конкретизации настройки

(см.

12.1}:

procedure SWAP is new EXCHANGE(ELEM => INTEGER); procedure SWAP is new EXCHANGE(CHARACTER); -- совмещение идентификатора SWAP function SQUARE is new SQUARING (INTEGER); -- по умолчанию используется «*» над INTEGER function SQUARE is new SQUARING (ITEM => MATRIX, "*" => MATRIX_PRODUCT); function SQUARE is new SQUARING (MATRIX, MATRIX_PRODUCT); -- что эквивалентно предыдущему package INT_VECTORS is new ON_VECTORS(INTEGER, TABLE, "+");




Начало  Назад  Вперед



Книжный магазин