comp.lang.ada
 help / color / mirror / Atom feed
* Access type to member procedure of instance (Object Oriented programming in Ada)
@ 2012-11-19  9:59 ake.ragnar.dahlgren
  2012-11-19 11:13 ` Georg Bauhaus
                   ` (7 more replies)
  0 siblings, 8 replies; 47+ messages in thread
From: ake.ragnar.dahlgren @ 2012-11-19  9:59 UTC (permalink / raw)


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


It is possible to create a workaround:

with Some_Package;

procedure Main is
   Message : Some_Package.Message_Type;
   
   procedure Method_Ref is
   begin
      Message.Print;
   end Method_Ref;
   
begin
   Method_Ref;
end Main;

Is there a better way? Or is this the optimal way?

Regards,
Åke Ragnar Dahlgren



^ permalink raw reply	[flat|nested] 47+ messages in thread

end of thread, other threads:[~2012-12-26 18:11 UTC | newest]

Thread overview: 47+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
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
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

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox