From: Ludovic Brenta <ludovic@ludovic-brenta.org>
Subject: Re: Indirect visibility of private part in child packages
Date: Thu, 4 Jun 2009 00:50:10 -0700 (PDT)
Date: 2009-06-04T00:50:10-07:00 [thread overview]
Message-ID: <5854cebc-55a9-469d-88bd-86b4704f8689@c19g2000yqc.googlegroups.com> (raw)
In-Reply-To: 77683561-2b21-42c3-8c90-6c08a0c16b99@n21g2000vba.googlegroups.com
Maybe you can solve your problem like this:
package body P1.P3 is
procedure A_Primitive (Item : out T3_Type) is
begin
T1_Type (Item).Low_Level_Data := ...;
end A_Primitive;
end P1.P3;
I am undecided whether the compiler is correct or wrong about the
visibility of Low_Level_Data. On the one hand, P1.P3 cannot see the
full declaration of T2_Type; on the other hand, it can see that
T2_Type publicly inherits from T1_Type and can also see the full
declaration of T1_Type.
It seems that the public (partial) view of T2_Type hides the full
declaration of T1_Type. So, I think my solution would work by removing
T2_Type out of the way.
Another solution, which enforces encapsulation better, would be:
package P1 is
type T1_Type is tagged private;
private
type Some_Type is ...;
type T1_Type is tagged record
Low_Level_Data : Some_Type;
end record;
procedure Set (Item : out T1_Type; Data : in Some_Type);
end P1;
package body P1.P3 is
procedure A_Primitive (Item : out T3_Type) is
begin
Set (Item, Data => ...); -- OK, calls inherited primitive
operation
end A_Primitive;
end P1.P3;
HTH
--
Ludovic Brenta.
next prev parent reply other threads:[~2009-06-04 7:50 UTC|newest]
Thread overview: 7+ messages / expand[flat|nested] mbox.gz Atom feed top
2009-06-04 5:45 Indirect visibility of private part in child packages Hibou57 (Yannick Duchêne)
2009-06-04 7:50 ` Ludovic Brenta [this message]
2009-06-04 11:47 ` Hibou57 (Yannick Duchêne)
2009-06-04 13:22 ` Robert A Duff
2009-06-04 14:04 ` Hibou57 (Yannick Duchêne)
2009-06-04 16:06 ` Adam Beneschan
2009-06-04 16:33 ` Hibou57 (Yannick Duchêne)
replies disabled
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox