Добавление символьных значений к универсальному типу

#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 и т.д.)