Spec-Zone.ru › Ada 95
Справочник Ada 95

12.5 Формальные типы

Формальный тип подтипа может использоваться для передачи в генерическую единицу подтипа, тип которого принадлежит к определённому классу типов.

Синтаксис

formal_type_declaration ::=
type defining_identifier[discriminant_part] is formal_type_definition;
formal_type_definition ::=
formal_private_type_definition
| formal_derived_type_definition
| formal_discrete_type_definition
| formal_signed_integer_type_definition
| formal_modular_type_definition
| formal_floating_point_definition
| formal_ordinary_fixed_point_definition
| formal_decimal_fixed_point_definition
| formal_array_type_definition
| formal_access_type_definition

Правила легальности

Для формального подтипа, фактический тип должен быть subtype_mark; он обозначает (генерический) фактический подтип.

Статическая семантика

formal_type_declaration объявляет (генерический) формальный тип и его первый подтип, (генерический) формальный подтип.
Форма formal_type_definition определяет класс, к которому принадлежит формальный тип. Для formal_private_type_definition ключевые слова tagged и limited указывают на класс (см. 12.5.1). Для formal_derived_type_definition класс является классом производности, укоренённым в типе предка. Для других формальных типов имя синтаксической категории указывает класс; formal_discrete_type_definition определяет дискретный тип и так далее.

Правила легальности

Фактический тип должен принадлежать классу, определённому для формального типа.

Статическая семантика

Формальный тип также принадлежит каждому классу, который содержит определённый класс. Предопределённые подпрограммы типа такие же, как для любого типа в определённом классе. Для формального типа, отличного от формального производного типа, это предопределённые операторы типа. Для элементарного формального типа предопределённые операторы неявно объявляются сразу после объявления формального типа. Для составного формального типа предопределённые операторы неявно объявляются либо сразу после объявления формального типа, либо позже в его непосредственной области видимости в соответствии с правилами 7.3.1. В экземпляре копия такого неявного объявления объявляет представление предопределённого оператора фактического типа, даже если этот оператор был переопределён для фактического типа. Правила, специфичные для формальных производных типов, приведены в 12.5.1.
ПРИМЕЧАНИЯ
7 Формальные типы, как и все типы, не имеют имён. Вместо этого name может обозначать генерический формальный подтип. Внутри генерической единицы генерический формальный тип рассматривается как отдельный от всех других (формальных или неформальных) типов.
8 discriminant_part разрешено только для определённых типов, и следовательно, только для определённых видов генерических формальных типов. См. 3.7.

Примеры

Примеры генерических формальных типов:
type Item is private;
type Buffer(Length : Natural) is limited private;
type Enum is (<>);
type Int is range <>;
type Angle is delta <>;
type Mass is digits <>;
type Table is array (Enum) of Item;
Пример генерической формальной части, объявляющей формальный целочисленный тип:
generic
type Rank is range <>;
First : Rank := Rank'First;
Second : Rank := First + 1; -- оператор "+" типа Rank


Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API