From mboxrd@z Thu Jan 1 00:00:00 1970 X-Spam-Checker-Version: SpamAssassin 3.4.4 (2020-01-24) on polar.synack.me X-Spam-Level: X-Spam-Status: No, score=-1.3 required=5.0 tests=BAYES_00,INVALID_MSGID autolearn=no autolearn_force=no version=3.4.4 X-Google-Language: ENGLISH,ASCII-7-bit X-Google-Thread: 103376,3d313337c39c5dd5 X-Google-Attributes: gid103376,public From: stt@houdini.camb.inmet.com (Tucker Taft) Subject: Re: run-time type identification Date: 1998/09/03 Message-ID: #1/1 X-Deja-AN: 387654150 Sender: news@inmet.camb.inmet.com (USENET news) X-Nntp-Posting-Host: houdini.camb.inmet.com References: <01bdd72e$49ee66b0$f330ea9e@ukp03332> Organization: Intermetrics, Inc. Newsgroups: comp.lang.ada Date: 1998-09-03T00:00:00+00:00 List-Id: Bob Fletcher (bob@radge.globalnet.co.uk) wrote: : Is there any equivalent in Ada 95 to the C++ "dynamic_cast" operator? Absolutely (we had it before they did ;-). Both the membership test and type conversion were generalized to provide this capability in a pretty intuitive (and safe) way. Any text on Ada 95 OOP should explain this pretty thoroughly. RM95 defines this in 4.5.2(3,4,30) and 4.6(23,40). : 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. Given X : A_Ptr, you can convert X.all to A2 and get the extra bits. E.g.: A2(X.all).extra_bits. You can also convert X to an access-to-A2 and then dereference (implicitly or explicitly). E.g.: A2_Ptr(X).all.extra_bits or A2_Ptr(X).extra_bits Prior to any of these conversions, you might want to find out whether X designates an object that has all the desired extra bits. This is done by: if X.all in A2'Class then ... If it doesn't, and you go ahead and do the conversion, you will get a Constraint_Error due to the failure of the Tag_Check. : 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). See above and RM95 paragraphs 4.5.2(3,4,30) and 4.6(23,42). No need for any messy unchecked_conversions. ;-) : Bob Fletcher : bob@radge.globalnet.co.uk -- -Tucker Taft stt@inmet.com http://www.inmet.com/~stt/ Intermetrics, Inc. Burlington, MA USA An AverStar Company