#ada
#ada
Вопрос:
Какой универсальный тип я должен использовать, если мне нужно присвоить ему символьное значение?
На данный момент я использую type Char is(<>);
в универсальном объявлении,
и присваиваю символьное значение следующим образом:
XY:GenericChar;
CharacterVariable: Character:='A';
XY:=GenericChar'Value(Character'Image(CharacterVariable));
Это работает, но я думаю, что должен быть способ получше.
Комментарии:
1. Я предполагаю, что у вас есть общий формальный тип, который разделяет свойства
Character
в той мере, в какой они имеют одинаковые литералы. В этом случае я должен спросить «почему»? Пожалуйста, дайте еще немного контекста для вашего вопроса.
Ответ №1:
Вы могли бы использовать 'Pos
и 'Val
.
Преобразование между несвязанными типами перечисления нетривиально. Лучше всего было бы использовать функцию преобразования, такую как:
generic
type Generic_Char is (<>);
with function To_Generic_Char (Source : Character) return Generic_Char is <>;
package Foo is
...
Таким образом, вашему универсальному пакету не пришлось бы заботиться о преобразовании.
Для создания экземпляра пакета вам пришлось бы создать функцию.
Ответ №2:
Этот общий формальный параметр, который вы используете, может быть предоставлен с любым «дискретным типом». Это означает, что клиент может использовать любой тип, связанный с целым числом, или перечисление, для создания экземпляра вашего универсального типа. Это также означает, что внутри подпрограммы доступны только операции, доступные как для целых чисел, так и для перечислений.
По большей части это означает, что вы можете назначать Char
s, вы можете сравнивать их, и у вас есть доступ к любому атрибуту, доступному для «дискретизации». Проверяя нашу удобную онлайн-страницу LRM на наличие языковых атрибутов (сохраняйте это в закладках при работе с универсальными), ища те, которые работают с «дискретными» или «скалярными» объектами / типами, мы видим, что это включает в себя:
- ‘сначала
- ‘изображение
- ‘последнее
- ‘максимум
- ‘мин.
- ‘pred
- ‘диапазон
- ‘succ
- ‘значение
- ‘значение
- (различные
wide_
варианты ‘изображения и’значения) - Обычные подозреваемые, доступные для всех объектов любого типа (например: ‘size’, ‘input и т.д.)