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:53:49+00:00	[thread overview]
Message-ID: <6sm71d$nee$1@emu.cs.rmit.edu.au> (raw)
In-Reply-To: 6sm537$agc$1@emu.cs.rmit.edu.au

sabljak@cs.rmit.edu.au (Steve Sabljak) writes:

>"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;

Or even

begin
   Specialised := new A2'(X => 1, Y => 2);
   Generalised := Specialised;
   if Generalised.all in A2 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 ` Tucker Taft
1998-09-03  0:00 ` Samuel Tardieu
1998-09-03  0:00   ` Bob Fletcher
1998-09-03  0:00     ` Fergus Henderson
1998-09-03  0:00     ` Matthew Heaney
1998-09-06  0:00       ` Samuel Tardieu
1998-09-03  0:00 ` Steve Sabljak
1998-09-03  0:00   ` Steve Sabljak [this message]
1998-09-03  0:00   ` Matthew Heaney
1998-09-03  0:00 ` Matthew Heaney
1998-09-03  0:00   ` Bob Fletcher
1998-09-03  0:00     ` Matthew Heaney
replies disabled

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