Ада-95. Компилятор GNAT



Обобщенные ссылочные типы - часть 3


package Message_Services is

type Message_Code_Type is range 0..100;

subtype Message is String;

function Get_Message(Message_Code: Message_Code_Type) return Message;

pragma Inline(Get_Message); end Message_Services;

package body Message_Services is

type Message_Handle is access constant Message;

Message_0: aliased constant Message := "OK"; Message_1: aliased constant Message := "Up"; Message_2: aliased constant Message := "Shutdown"; Message_3: aliased constant Message := "Shutup"; . . .

Message_Table: array (Message_Code_Type) of

Message_Handle := (0 => Message_0'Access, 1 => Message_1'Access, 2 => Message_2'Access, 3 => Message_3'Access, . . . );

function Get_Message(Message_Code: Message_Code_Type) return Message is

begin

return Message_Table(Message_Code).all; end Get_Message; end Message_Services;

В данном случае, достаточно элегантным приемом является использование массива Message_Table, который представляет таблицу ссылок на строковые константы переменной длины. Следует также заметить, что при этом не производится никакого распределения пространства в области динамической памяти.




Содержание  Назад  Вперед