From: "Hibou57 (Yannick Duchêne)" <yannick_duchene@yahoo.fr>
Subject: Re: Indirect visibility of private part in child packages
Date: Thu, 4 Jun 2009 04:47:26 -0700 (PDT)
Date: 2009-06-04T04:47:26-07:00 [thread overview]
Message-ID: <bc225421-978e-41f8-8a01-d370e5236673@h11g2000yqb.googlegroups.com> (raw)
In-Reply-To: 5854cebc-55a9-469d-88bd-86b4704f8689@c19g2000yqc.googlegroups.com
Bonjour Ludovic, and thanks for your reply :)
On 4 juin, 09:50, Ludovic Brenta <ludo...@ludovic-brenta.org> wrote:
> 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've just tried it, and it does not work better. The compiler
complains there are not selector Low_Level_Data for T1_Type.
> 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.
This is exactly the same think in my mind. Perhaps the semantic is
ambigous here.
> 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.
T2_Type is required ;) The purpose is to have T2_Type and T3_Type, and
may be later some others, beside of each other.
> 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
I will try it soon and tell about the result. But at first sight, I
think that the compiler gonna complain that Set is a primitive of
T1_Type and thus that it must be defined in the public part. Further
more, I think Set would habe to be redefined for each T2_Type, T3_Type
and etc.
Will try and tell later
Have a nice day
next prev parent reply other threads:[~2009-06-04 11:47 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
2009-06-04 11:47 ` Hibou57 (Yannick Duchêne) [this message]
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