From: Robert A Duff <bobduff@shell01.TheWorld.com>
Subject: Re: tagged record child: override constructor?
Date: 13 Sep 2005 14:55:47 -0400
Date: 2005-09-13T14:55:47-04:00 [thread overview]
Message-ID: <wccd5nc23ws.fsf@shell01.TheWorld.com> (raw)
In-Reply-To: ReDVe.2$Fv6.0@dfw-service2.ext.ray.com
Jeffrey Carter <spam@spam.com> writes:
> sean.gilbertson@gmail.com wrote:
> > I have a tagged record that is declared private, along with a
> > constructor function which returns an instance. I do this to enforce
> > the assignment of several required fields in the record, so if you know
> > how to do this another way, please let me know!
>
> It depends on what you mean by "enforce the assignment of several
> required fields". It is impossible to force the client to call your
> function, though you can arrange things so that the type is useless to
> the client if the client doesn't first call your function.
[... lots of good possibilities snipped...]
There's another way to "enforce...":
package P is
type T(<>) is private;
function Make_T(...) return T;
private
type T is record...
end P;
use P;
Now clients can't create uninitialized objects of type T:
X: T; -- illegal
type T_Ptr is access T;
Y: T_Ptr := new T; -- illegal
type R is
record
Component: T; -- illegal
end record;
type A is array(...) of T; -- illegal
The client is forced to call Make_T:
X: T := Make_T(...); -- OK
Y: T_Ptr := new T'(Make_T(...)); -- OK
etc.
- Bob
next prev parent reply other threads:[~2005-09-13 18:55 UTC|newest]
Thread overview: 38+ messages / expand[flat|nested] mbox.gz Atom feed top
2005-09-13 5:58 tagged record child: override constructor? sean.gilbertson
2005-09-13 6:39 ` David Trudgett
2005-09-13 7:32 ` Dmitry A. Kazakov
2005-09-13 7:56 ` tmoran
2005-09-13 15:23 ` sean.gilbertson
2005-09-13 17:37 ` Martin Krischik
2005-09-13 19:29 ` Ludovic Brenta
2005-09-14 7:49 ` Dmitry A. Kazakov
2005-09-14 9:05 ` Maciej Sobczak
2005-09-14 13:20 ` Dmitry A. Kazakov
2005-09-14 13:52 ` Hyman Rosen
2005-09-14 16:47 ` Dmitry A. Kazakov
2005-09-14 17:16 ` Hyman Rosen
2005-09-14 20:20 ` Dmitry A. Kazakov
2005-09-14 20:34 ` Georg Bauhaus
2005-09-14 20:56 ` Hyman Rosen
2005-09-15 7:31 ` Dmitry A. Kazakov
2005-09-15 13:19 ` Hyman Rosen
2005-09-15 13:45 ` Maciej Sobczak
2005-09-15 17:45 ` Dmitry A. Kazakov
2005-09-15 18:54 ` Hyman Rosen
2005-09-16 9:32 ` Dmitry A. Kazakov
2005-09-16 14:52 ` Hyman Rosen
2005-09-16 15:33 ` Jean-Pierre Rosen
2005-09-16 18:37 ` Hyman Rosen
2005-09-16 21:03 ` Dmitry A. Kazakov
2005-09-16 21:33 ` Hyman Rosen
[not found] ` <98ox2x9xvj9z.1uh92dslhvt4g.dlg@40tude.net>
2005-09-17 12:47 ` Georg Bauhaus
2005-09-17 15:56 ` Dmitry A. Kazakov
2005-09-14 16:14 ` Martin Krischik
2005-09-14 16:57 ` Dmitry A. Kazakov
2005-09-14 18:35 ` Martin Krischik
2005-09-14 9:28 ` Alex R. Mosteo
2005-09-14 16:10 ` Martin Krischik
2005-09-13 9:33 ` Georg Bauhaus
2005-09-13 16:37 ` Jeffrey Carter
2005-09-13 18:55 ` Robert A Duff [this message]
2005-09-13 22:18 ` Jeffrey Carter
replies disabled
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox