comp.lang.ada
 help / color / mirror / Atom feed
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



  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