From: "Randy Brukardt" <randy@rrsoftware.com>
Subject: Re: Access type to member procedure of instance (Object Oriented programming in Ada)
Date: Mon, 19 Nov 2012 17:59:06 -0600
Date: 2012-11-19T17:59:06-06:00 [thread overview]
Message-ID: <k8eh4g$bs8$1@munin.nbi.dk> (raw)
In-Reply-To: 9b0bcb37-8ae3-440f-af4f-a796702e4250@googlegroups.com
<ake.ragnar.dahlgren@gmail.com> wrote in message
news:9b0bcb37-8ae3-440f-af4f-a796702e4250@googlegroups.com...
>Not sure if this has already been discussed but: Is it possible to define a
>pointer to
> a member procedure of an instance?
>
>This problem has it's origin in the implementation of the MVC pattern for a
>GtkAda application.
>Consider the following:
>
>package Some_Package is
>
> type Message_Type is tagged null record;
>
> procedure Print(Message : Message_Type);
>
>end Some_Package;
>
>package body Some_Package is
>
> procedure Print (Message : Message_Type) is
> begin
> null;
> end Print;
>
>end Some_Package;
>
>Then it is possible to create the following Main application that compiles
>just fine:
>
>with Some_Package;
>procedure Main is
> Message : Some_Package.Message_Type;
>begin
> Message.Print;
>end Main;
>
>Is it possible to create a parameterless access type to the Message.Print
>procedure?
>The following application refuses to compile:
>
>with Some_Package;
>procedure Main is
> Message : Some_Package.Message_Type;
>
> Method_Ref : access procedure := Message.Print'Access;
>begin
> Method_Ref;
>end Main;
>
>The error message is: no selector "Print" for type "Message_Type" defined
>at some_package.ads:3
I think this should work; if it doesn't, the error has something to do with
conventions. So there is probably a compiler bug here.
The "name" (Ada synax terminology) "Message.Print" represents a
parameterless procedure, and can be used in the same way as other
parameterless procedures. In particular, it can be renamed as a
parameterless procedure:
procedure P renames Message.Print;
I'm not certain what the convention of this procedure is (it might be
defined to be "intrinsic" somewhere, in which case you couldn't take 'Access
to it, I can't find such a rule on a quick check of the RM). But it surely
exists and should not report that "selector "Print" doesn't exist.
In any case, our intent is that one could use this just like any other
procedure with the same profile. You can rename it, pass it as a formal
subprogram, call it of course, etc. So I would expect 'Access to work as
well, unless the RM explicitly says it does not.
Randy.
P.S. I don't know what everyone else is talking about here; it's *obvious*
;-) that this should work in Ada and all other programming languages with
similar constructs. (Please make careful note of the smiley here.)
next prev parent reply other threads:[~2012-11-27 11:38 UTC|newest]
Thread overview: 47+ messages / expand[flat|nested] mbox.gz Atom feed top
2012-11-19 9:59 Access type to member procedure of instance (Object Oriented programming in Ada) ake.ragnar.dahlgren
2012-11-19 11:13 ` Georg Bauhaus
2012-11-19 11:39 ` Brian Drummond
2012-11-20 11:43 ` Brian Drummond
2012-11-20 21:57 ` Randy Brukardt
2012-11-19 13:03 ` sbelmont700
2012-11-19 16:18 ` Adam Beneschan
2012-11-19 17:02 ` Peter C. Chapin
2012-11-19 18:23 ` Adam Beneschan
2012-11-19 20:57 ` Peter C. Chapin
2012-11-19 21:26 ` Dmitry A. Kazakov
2012-11-19 22:19 ` Adam Beneschan
2012-11-20 10:12 ` Dmitry A. Kazakov
2012-11-20 21:51 ` Randy Brukardt
2012-11-21 8:24 ` Dmitry A. Kazakov
2012-11-21 22:19 ` Randy Brukardt
2012-11-20 10:59 ` Brian Drummond
2012-11-19 20:22 ` ake.ragnar.dahlgren
2012-11-20 11:16 ` Brian Drummond
2012-11-19 20:52 ` ake.ragnar.dahlgren
2012-11-19 21:56 ` Dmitry A. Kazakov
2012-11-22 9:49 ` ake.ragnar.dahlgren
2012-11-19 22:13 ` sbelmont700
2012-11-19 23:59 ` Randy Brukardt [this message]
2012-11-20 0:05 ` Randy Brukardt
2012-11-20 1:00 ` Adam Beneschan
2012-11-20 21:38 ` Randy Brukardt
2012-11-20 23:43 ` Adam Beneschan
2012-11-21 22:12 ` Randy Brukardt
2012-11-22 1:59 ` Adam Beneschan
2012-11-29 2:43 ` Randy Brukardt
2012-11-20 0:52 ` Adam Beneschan
2012-11-20 21:34 ` Randy Brukardt
2012-11-20 11:28 ` Brian Drummond
2012-11-20 14:27 ` Georg Bauhaus
2012-11-20 15:52 ` Adam Beneschan
2012-11-22 9:47 ` ake.ragnar.dahlgren
2012-11-22 10:25 ` Dmitry A. Kazakov
2012-12-02 20:42 ` ake.ragnar.dahlgren
2012-12-03 11:21 ` Dmitry A. Kazakov
2012-12-03 20:21 ` ake.ragnar.dahlgren
2012-12-03 22:15 ` Dmitry A. Kazakov
2012-12-25 21:51 ` Gustaf Thorslund
2012-12-26 18:11 ` ake.ragnar.dahlgren
2012-11-22 12:13 ` Brian Drummond
2012-12-03 16:17 ` ake.ragnar.dahlgren
2012-12-03 21:56 ` Brian Drummond
replies disabled
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox