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

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
| formal_interface_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 Формальные типы, как и все типы, не имеют имен. Вместо этого имя может указывать на обобщённый формальный подтип. В пределах обобщённой единицы формальный тип рассматривается как отдельный от всех других (формальных или неформальных) типов.
8 Часть дискриминантов допускается только для определённых типов, а следовательно, и для определённых видов формальных типов. См. 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