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
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
next prev parent 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