From: "Dmitry A. Kazakov" <mailbox@dmitry-kazakov.de>
Subject: Re: Universal type in Ada
Date: Wed, 15 Jun 2005 15:55:15 +0200
Date: 2005-06-15T15:55:15+02:00 [thread overview]
Message-ID: <1a7ughq9xrk30.1q7sknowaq5or.dlg@40tude.net> (raw)
In-Reply-To: bf72da73.0506150507.6058c851@posting.google.com
On 15 Jun 2005 06:07:12 -0700, zw wrote:
> Hi, I am trying to create a Universal type in Ada such as "Object" in
> Java so that I could define a function that returns a value in this
> Universal type, then I could lower-cast value in this type to its
> specific type such as String, Float or any user-defined types. Because
> in Java if a method returns an Object, it could be casted to any other
> types that are subtypes of Object. Is there a Universal type in Ada?
Yes. What you describe is a contravariant result. In Ada it is achieved by
returning a class-wide result. A function of this sort is also called
"abstract factory".
> Could anyone tell me how to create such types in Ada, please?
type Object is abstract tagged null record;
function Factory (...) return Object'Class;
type My_Special_Object is new Object with ...;
declare
X : My_Special_Object;
begin
...
X := My_Special_Object Factory (...));
Here the result of Factory is explicitly converted to My_Special_Object. If
that is impossible (because the result is not a My_Special_Object)
Constraint_Error exception is propagated at run-time.
--
Regards,
Dmitry A. Kazakov
http://www.dmitry-kazakov.de
next prev parent reply other threads:[~2005-06-15 13:55 UTC|newest]
Thread overview: 19+ messages / expand[flat|nested] mbox.gz Atom feed top
2005-06-15 13:07 Universal type in Ada zw
2005-06-15 13:32 ` Larry Kilgallen
2005-06-16 13:13 ` zw
2005-06-16 14:36 ` Preben Randhol
2005-06-17 2:54 ` Stephen Leake
2005-06-19 17:38 ` Martin Krischik
2005-06-15 13:55 ` Dmitry A. Kazakov [this message]
2005-06-15 14:37 ` Preben Randhol
2005-06-15 16:48 ` Dmitry A. Kazakov
2005-06-15 14:34 ` Preben Randhol
2005-06-16 13:10 ` zw
2005-06-15 16:31 ` Georg Bauhaus
2005-06-16 8:18 ` Ole-Hjalmar Kristensen
2005-06-16 11:59 ` Dmitry A. Kazakov
2005-06-16 13:23 ` zw
2005-06-16 14:19 ` jimmaureenrogers
2005-06-16 14:31 ` Dmitry A. Kazakov
2005-06-19 17:31 ` Martin Krischik
2005-06-19 17:26 ` Martin Krischik
replies disabled
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox