Справочник Ada 2012
12.5.3 Типы формальных массивов
Категория, определённая для типа формального массива, — это категория всех типов массивов.
Синтаксис
Правила допустимости
Единственная форма discrete_subtype_definition, разрешённая в объявлении генерического формального (ограниченного) типа подтипа массива, — это subtype_mark.
Для формального подтипа массива фактический подтип должен удовлетворять следующим условиям:
- Тип формального массива и фактический тип массива должны иметь одинаковую размерность; формальный подтип и фактический подтип должны быть либо оба ограниченными, либо оба неограниченными.
- Для каждой позиции индекса типы индексов должны быть одинаковыми, а типы подтипов индексов (если неограниченные) или диапазоны индексов (если ограниченные) должны статически совпадать (см. 4.9.1).
- Подтипы компонентов формального и фактического типов массивов должны статически совпадать.
- Если формальный тип имеет ссылочные компоненты, то и фактический также должен иметь.
Примеры
Пример типов формальных массивов:
-- заданный генерический пакет
generic
type Item is private;
type Index is (<>);
type Vector is array (Index range <>) of Item;
type Table is array (Index) of Item;
package P is
...
end P;
type Item is private;
type Index is (<>);
type Vector is array (Index range <>) of Item;
type Table is array (Index) of Item;
package P is
...
end P;
-- и типы
type Mix is array (Color range <>) of Boolean;
type Option is array (Color) of Boolean;
type Option is array (Color) of Boolean;
-- тогда Mix может соответствовать Vector, а Option — Table
package R is new P(Item => Boolean, Index => Color,
Vector => Mix, Table => Option);
Vector => Mix, Table => Option);
-- Обратите внимание, что Mix не может соответствовать Table, а Option — Vector