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=-0.6 required=5.0 tests=BAYES_00,DATE_IN_PAST_24_48 autolearn=no autolearn_force=no version=3.4.4 X-Google-Thread: a07f3367d7,26a21b9e317dc639 X-Google-Attributes: gida07f3367d7,public,usenet X-Google-NewGroupId: yes X-Google-Language: ENGLISH,ASCII-7-bit Received: by 10.180.96.6 with SMTP id do6mr364557wib.1.1353553570106; Wed, 21 Nov 2012 19:06:10 -0800 (PST) Path: q13ni12941wii.0!nntp.google.com!feeder2.cambriumusenet.nl!feed.tweaknews.nl!85.12.40.131.MISMATCH!xlned.com!feeder3.xlned.com!news.astraweb.com!border5.a.newsrouter.astraweb.com!border2.nntp.ams.giganews.com!border3.nntp.ams.giganews.com!border1.nntp.ams.giganews.com!nntp.giganews.com!rt.uk.eu.org!de-l.enfer-du-nord.net!feeder1.enfer-du-nord.net!eternal-september.org!feeder.eternal-september.org!mx04.eternal-september.org!.POSTED!not-for-mail From: Brian Drummond Newsgroups: comp.lang.ada Subject: Re: Access type to member procedure of instance (Object Oriented programming in Ada) Date: Tue, 20 Nov 2012 11:43:35 +0000 (UTC) Organization: A noiseless patient Spider Message-ID: References: <9b0bcb37-8ae3-440f-af4f-a796702e4250@googlegroups.com> Mime-Version: 1.0 Injection-Date: Tue, 20 Nov 2012 11:43:35 +0000 (UTC) Injection-Info: mx04.eternal-september.org; posting-host="dfff62e1e537b55df42008571c03e0fe"; logging-data="1599"; mail-complaints-to="abuse@eternal-september.org"; posting-account="U2FsdGVkX18qxuCf3Se0jAt6ICj+7jF249Ql+dIp9A0=" User-Agent: Pan/0.139 (Sexual Chocolate; GIT bf56508 git://git.gnome.org/pan2) Cancel-Lock: sha1:DzFWN5FEleCFUz3hjogyV0VfIDg= Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Date: 2012-11-20T11:43:35+00:00 List-Id: On Mon, 19 Nov 2012 11:39:03 +0000, Brian Drummond wrote: > On Mon, 19 Nov 2012 01:59:42 -0800, ake.ragnar.dahlgren wrote: > >> Not sure if this has already been discussed but: Is it possible to >> define a pointer to a member procedure of an instance? > > Yes. >> Is it possible to create a parameterless access type to the >> Message.Print procedure? The following application refuses to compile: > > Message.Print is not parameterless, it is identical to Print(Message) > so ... no. Okay. I am astonished! But I am more than happy to withdraw the above "no". - Brian -------------------------------------------------------- with Some_Package; procedure Main is Message : Some_Package.Message_Type; procedure P renames Message.Print; Method_Ref : access procedure := P'access; begin Message.Print; P; Method_Ref.all; end Main; -------------------------------------------------------- ./main Hello Hello Hello And just for completeness... -------------------------------------------------------- package Some_Package is type Message_Type is tagged null record; procedure Print(Message : Message_Type); end Some_Package; -------------------------------------------------------- with Ada.Text_IO; package body Some_Package is procedure Print (Message : Message_Type) is begin Ada.Text_IO.Put_Line("Hello"); end Print; end Some_Package; --------------------------------------------------------