From mboxrd@z Thu Jan 1 00:00:00 1970 X-Spam-Checker-Version: SpamAssassin 3.4.4 (2020-01-24) on polar.synack.me X-Spam-Level: X-Spam-Status: No, score=-1.3 required=5.0 tests=BAYES_00,INVALID_MSGID autolearn=no autolearn_force=no version=3.4.4 X-Google-Language: ENGLISH,ASCII-7-bit X-Google-Thread: 103376,e94a7e4f6f888766 X-Google-Attributes: gid103376,public From: "news.oxy.com" Subject: Re: Self-referential types Date: 1999/10/12 Message-ID: #1/1 X-Deja-AN: 535834185 References: <7ttb4a$8mq$1@nnrp1.deja.com> <3802f2db_2@news1.prserv.net> Organization: Posted via Supernews, http://www.supernews.com X-MimeOLE: Produced By Microsoft MimeOLE V4.72.3110.3 Newsgroups: comp.lang.ada X-Complaints-To: newsabuse@supernews.com Date: 1999-10-12T00:00:00+00:00 List-Id: Matthew Heaney wrote in message <3802f2db_2@news1.prserv.net>... >In article , "Vladimir Olensky" > wrote: > >> How it is possible to initialize access variable >> by the initial value that is access attribute to type ? > >Yes, of course it's possible to initialize an access object that is an >access to a type! > >For a limited type T, then inside the declaration of the type, the >expression T'Access refers to the "current instance" of the type. Very good clarification indeed. >This is something a lot of programmers haven't learned yet. Let alone people which primary occupation is not programming ( as for me my primary occupation is telecommunications). >This is the basis for programming with access discriminants, which is >how you do MI in Ada95. > >For example: > > type Handle_Type (Stack : access Stack_Type) is > limited null record; > > type Stack_Type is > limited record > Handle : Handle_Type (Stack_Type'Access); --!!! > > end record; > > >Here's another example: > > type T is tagged limited private; >... >private > > function Do_Get_Default (O : T) return T2; > > function Get_Default (O : T'Class) return T2; > > type T is > tagged limited record > O : T2 := Get_Default (T'Access); --!!! > end record; > > >Where > > function Get_Default (O : T'Class) return T2 is > begin > return Do_Get_Default (O); > end; > > >This is the idiom you use if you want to let a descendent type change >the default of component declared by the ancestor. > All this is very interesting indeed. As for me I never used such thing and was not sure that it makes any sense to apply access attrubute to anything except oject instance. In other languages there exists "Self" parameter and when it is used in class declarations it refers to current class instance. You might put a short article regarding this issue to Adapower. I am sure it will be very useful. >> Access attributes can not be applied to type. >Wrong. It is wrong only for limited types. For types that are not limited it is true. >> It may only be applied to some object but not to its description. >Wrong. The same as above. For non limited types compiler gives you an error message: ------------------------------------------------------ Wrong_Initialization : List_Type := Cell_Type'Access; test.adb:14:37: "Access" attribute cannot be applied to type gnatmake: "test.adb" compilation error ----------------------------------------------------------------- This can make one think that it is always true . If GNAT would give you additional info that such construct could be applied only to limited types this could make person to look deeper to that (at least out of curiosity ). Again thanks for good clarification. It is very useful. Regards, Vladimir Olensky