From: mab@dst17.wdl.loral.com (Mark A Biggar)
Subject: Re: Mut. Recurs. in Ada9X w/o Breaking Encaps.? (LONG)
Date: Tue, 27 Sep 1994 18:48:27 GMT
Date: 1994-09-27T18:48:27+00:00 [thread overview]
Message-ID: <1994Sep27.184827.17813@wdl.loral.com> (raw)
In-Reply-To: 1994Sep27.165203.9192@swlvx2.msd.ray.com
[Discussion of how to set up mutualy recursive tagged types]
First of all you really only need to have a forward definition of one
of the two types, lets choose office.
So first define a abstract office type that doesn't knoe about employees:
package Abs_Office is
type Abstract_Office is abstract tagged null record;
type Access_Office is access all Abstract_Office'class;
end Abs_Office;
Now we can define the employee type in terms of the above abstract type:
with Abs_Office; use Abs_Office;
package Emp is
type Employee is tagged record
Office: Access_Office;
end record;
type Employee_Access is access all Employee'class;
end Emp;
Now we can define the real office type:
with Abs_Office; use Abs_Office;
with Emp; use Emp;
package Off is
type Office is new Abstract_Office with record
Employee: Employee_Access;
end record;
end Off;
This of course ignores the private aspects of the C++ example given in the
original article, but these are easly added using private types and/or
private extensions in the above packages.
Moral: if you need mutualy recursive tagged types with out breaking
encapsulation, then use an abstract type for you forward reference.
--
Mark Biggar
mab@wdl.loral.com
next prev parent reply other threads:[~1994-09-27 18:48 UTC|newest]
Thread overview: 43+ messages / expand[flat|nested] mbox.gz Atom feed top
1994-09-27 16:52 Mut. Recurs. in Ada9X w/o Breaking Encaps.? (LONG) John Volan
1994-09-27 18:48 ` Mark A Biggar [this message]
1994-09-29 1:46 ` John Volan
1994-09-29 13:57 ` Tucker Taft
1994-09-29 17:20 ` Bjarne Stroustrup <9758-26353> 0112760
1994-09-30 1:38 ` Tucker Taft
1994-09-30 12:33 ` Bjarne Stroustrup <9758-26353> 0112760
1994-09-29 18:37 ` John Volan
1994-09-29 19:34 ` David Weller
1994-09-30 22:13 ` John Volan
1994-10-02 3:31 ` Andrew Lees
1994-09-30 1:47 ` Tucker Taft
1994-09-30 13:30 ` John Volan
1994-09-29 18:10 ` R. William Beckwith
1994-10-03 0:33 ` Cyrille Comar
1994-09-28 14:01 ` Norman H. Cohen
1994-09-29 2:12 ` John Volan
1994-09-29 14:01 ` Tucker Taft
1994-09-29 18:37 ` Norman H. Cohen
1994-09-29 9:48 ` Magnus Kempe
1994-09-29 13:10 ` Magnus Kempe
1994-09-29 18:05 ` Tucker Taft
1994-09-30 10:20 ` Mut. Recurs. in Ada9X w/o Breaking Encaps.? Magnus Kempe
1994-09-30 13:22 ` Tucker Taft
1994-10-01 1:24 ` Mut. Recurs. in Ada9X w/o Breaking Encaps.? (LONG) Adam Beneschan
1994-10-01 12:01 ` Magnus Kempe
1994-10-01 18:43 ` Mark A Biggar
1994-10-02 16:41 ` John Volan
1994-10-02 23:33 ` Matt Kennel
1994-10-03 8:07 ` Mut. Recurs. in Ada9X w/o Breaking Encaps.? Magnus Kempe
1994-10-03 12:14 ` Mut. Recurs. in Ada9X w/o Breaking Encaps.? (LONG) Robert I. Eachus
1994-10-04 2:12 ` R. William Beckwith
1994-10-04 16:00 ` John Volan
1994-10-05 11:42 ` Robert I. Eachus
1994-10-05 21:09 ` Matt Kennel
1994-10-03 20:29 ` Harry Koehnemann
1994-09-29 13:35 ` John Volan
1994-09-30 20:27 ` Norman H. Cohen
1994-10-01 1:47 ` John Volan
1994-10-01 20:44 ` Tucker Taft
1994-10-03 11:29 ` Robert I. Eachus
1994-09-30 22:46 ` Matt Kennel
1994-10-01 2:11 ` John Volan
replies disabled
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox