comp.lang.ada
 help / color / mirror / Atom feed
From: sabljak@cs.rmit.edu.au (Steve Sabljak)
Subject: Re: run-time type identification
Date: 1998/09/03
Date: 1998-09-03T13:20:39+00:00	[thread overview]
Message-ID: <6sm537$agc$1@emu.cs.rmit.edu.au> (raw)
In-Reply-To: 01bdd72e$49ee66b0$f330ea9e@ukp03332

"Bob Fletcher" <bob@radge.globalnet.co.uk> writes:

>Is there any equivalent in Ada 95 to the C++ "dynamic_cast" operator?

>For example, say you have a class A, and a derived class A2.
>In the package for class A there is also:
>	type A_Ptr is access A'Class;
>You can assign an access to an object of class A2 to a variable of type
>A_Ptr, but, as far as I know, cannot then de-reference the A_Ptr in such a
>way that the extra bits of class A2 are accessible.

>It seems to me that this is something that would make a lot of sense when
>dealing with class-wide access types, which can easily be used to go up the
>object heirarchy, but not, as far as I know, to go back down, (without
>messing about with unchecked_conversion).

You can do run-time type identification like this

with Ada.Tags; use Ada.Tags;
with A;        use A;

procedure Tag_Test is

   Generalised   : A_Ptr;   
   Specialised   : A2_Ptr;   
   Specialised_2 : A2_Ptr;   

begin
   Specialised := new A2'(X => 1, Y => 2);
   Generalised := Specialised;
   if Generalised'Tag = A2'Tag then
	   Specialised_2 := A2_Ptr(Generalised);
   end if;
end Tag_Test;

cheers
-Steve
--
Steve Sabljak - RMIT - 3rd Year Computer Science  
e-mail: sabljak@cs.rmit.edu.au            
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~




  reply	other threads:[~1998-09-03  0:00 UTC|newest]

Thread overview: 13+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
1998-09-03  0:00 run-time type identification Bob Fletcher
1998-09-03  0:00 ` Steve Sabljak [this message]
1998-09-03  0:00   ` Matthew Heaney
1998-09-03  0:00   ` Steve Sabljak
1998-09-03  0:00 ` Matthew Heaney
1998-09-03  0:00   ` Bob Fletcher
1998-09-03  0:00     ` Matthew Heaney
1998-09-03  0:00 ` Tucker Taft
1998-09-03  0:00 ` Samuel Tardieu
1998-09-03  0:00   ` Bob Fletcher
1998-09-03  0:00     ` Matthew Heaney
1998-09-06  0:00       ` Samuel Tardieu
1998-09-03  0:00     ` Fergus Henderson
replies disabled

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox