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

       

Проверка типа объекта во время выполнения программы


В процессе выполнения программы можно осуществить проверку объекта на принадлежность его к какому-либо индивидуальному типу путем использования атрибута 'Tag

Чтобы продемонстрировать это, предположим, что реализация процедуры Show

описывается следующим образом:

procedure Show (Self: in Root'Class) is

begin

if Self'Tag = Root'Tag then

Ada.Text_IO.Put_Line ("Root"); elsif Self'Tag = Child_1'Tag then

Ada.Text_IO.Put_Line ("Child_1"); elsif Self'Tag = Clild_2'Tag then

Ada.Text_IO.Put_Line ("Clild_2"); elsif Self'Tag = Grand_Child_2_1'Tag then

Ada.Text_IO.Put_Line ("Grand_Child_2_1"); else

Ada.Text_IO.Put_Line ("Unknown type"); end if;

end Show;

Кроме того, в процессе выполнения программы, возможно осуществление проверки принадлежности (или не принадлежности) типа объекта к какому-либо классу.

Для выполнения таких проверок используются операции проверки диапазона "in" и "not in":

. . . if Some_Instance in Child_1'Class then

. . . end if; . . .

В данном примере выполняется проверка принадлежности переменной Some_Instance

к иерархии типов, корнем которой будет тип Child_1, причем, предполагается, что переменная Some_Instance

является переменной надклассового или тэгового типа.

Следует также обратить внимание на то, что для выполнения этой проверки используется "Some_Instance in Child_1'Class", а не "Some_Instance in Child_1".



Содержание раздела