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.9 required=5.0 tests=BAYES_00,FREEMAIL_FROM autolearn=unavailable autolearn_force=no version=3.4.4 X-Received: by 2002:a6b:1a82:: with SMTP id a124-v6mr6810527ioa.66.1527952852069; Sat, 02 Jun 2018 08:20:52 -0700 (PDT) X-Received: by 2002:a9d:190a:: with SMTP id j10-v6mr119489ota.0.1527952851872; Sat, 02 Jun 2018 08:20:51 -0700 (PDT) Path: eternal-september.org!reader01.eternal-september.org!reader02.eternal-september.org!feeder.eternal-september.org!weretis.net!feeder4.news.weretis.net!newsreader5.netcologne.de!news.netcologne.de!peer03.ams1!peer.ams1.xlned.com!news.xlned.com!peer03.am4!peer.am4.highwinds-media.com!peer03.iad!feed-me.highwinds-media.com!news.highwinds-media.com!v8-v6no3215742itc.0!news-out.google.com!f20-v6ni1999itd.0!nntp.google.com!u74-v6no3225139itb.0!postnews.google.com!glegroupsg2000goo.googlegroups.com!not-for-mail Newsgroups: comp.lang.ada Date: Sat, 2 Jun 2018 08:20:51 -0700 (PDT) Complaints-To: groups-abuse@google.com Injection-Info: glegroupsg2000goo.googlegroups.com; posting-host=2a02:1206:45c6:8b20:81b9:b10b:5525:d19f; posting-account=gRqrnQkAAAAC_02ynnhqGk1VRQlve6ZG NNTP-Posting-Host: 2a02:1206:45c6:8b20:81b9:b10b:5525:d19f User-Agent: G2/1.0 MIME-Version: 1.0 Message-ID: <795d1d54-0868-4745-8132-b38165494f39@googlegroups.com> Subject: Using interfaces From: gautier_niouzes@hotmail.com Injection-Date: Sat, 02 Jun 2018 15:20:52 +0000 Content-Type: text/plain; charset="UTF-8" X-Received-Bytes: 3066 X-Received-Body-CRC: 883809183 Xref: reader02.eternal-september.org comp.lang.ada:52856 Date: 2018-06-02T08:20:51-07:00 List-Id: Hello, I am developing a package for displaying some kinds of figures on an open set of devices. I'm trying to use interfaces for that. with System; package Test_interfaces is type Real is digits System.Max_Digits; type Box is record left, bottom, width, height : Real; end record; type Graphic_Figures is abstract tagged record bounding : Box; end record; procedure Set_Bounding_Box (figure: Graphic_Figures); -- This draws any kind of figure procedure Draw (figure: Graphic_Figures; parameter: Integer) is abstract; type Any_Device is interface; -- Callback method for filling a rectangle procedure Filled_Rectangle (device: Any_Device) is abstract; type Device_X is new Any_Device with null record; procedure Filled_Rectangle (device: Device_X); type Figure_A is new Graphic_Figures with null record; procedure Draw (figure: Figure_A; parameter: Integer); type Figure_A_on_Device_X is new Figure_A and Device_X with null record; end Test_interfaces; Now on Figure_A_on_Device_X GNAT tells me rightfully that Device_X must be an interface. Now if I have instead: type Figure_A_on_Device_X is new Figure_A and Any_Device with null record; procedure Filled_Rectangle (device: Figure_A_on_Device_X); or in two steps, type Figure_A_on_Any_Device is abstract new Figure_A and Any_Device with null record; type Figure_A_on_Device_X is new Figure_A_on_Any_Device with null record; procedure Filled_Rectangle (device: Figure_A_on_Device_X); this is okay but I would need to copy-paste the same implementation code of Filled_Rectangle for device X in the case of Figure_B and so on. Not nice! How do I get something like Figure_A_on_Device_X ? Am I expecting too much from interfaces? TIA Gautier _____________________________________________________________ A free online game in Ada: http://pasta.phyrama.com/game.html