Справочник по Ada 2005
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