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

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

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

Синтаксис

formal_type_declaration ::=
formal_complete_type_declaration
| formal_incomplete_type_declaration
formal_complete_type_declaration ::=
type defining_identifier[discriminant_part] is formal_type_definition
[aspect_specification];
formal_incomplete_type_declaration ::=
type defining_identifier[discriminant_part] [is tagged];
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). Зарезервированное слово tagged также выполняет эту роль в случае formal_incomplete_type_declaration. Для 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