comp.lang.ada
 help / color / mirror / Atom feed
From: "Dmitry A. Kazakov" <mailbox@dmitry-kazakov.de>
Subject: Re: In precision typing we trust
Date: Thu, 28 Aug 2025 10:24:54 +0200	[thread overview]
Message-ID: <108p3om$16qn1$3@dont-email.me> (raw)
In-Reply-To: <108occm$11h9j$2@dont-email.me>

On 2025-08-28 03:45, Lawrence D’Oliveiro wrote:

> But the function has to return the base class type, it cannot have
> different return types dynamically.

Of course you can. That is the meaning of the term "class" and "class 
type" as a type which values are the values of the class members.

In Ada class type is denoted as T'Class. T'Class values are values of T 
or any type derived from T. The operations declared on T'Class are 
called class-wide, so

    function F (...) return T'Class;

> Note how you have a switch-expression that uses the value of the
> event-type field to return the corresponding type object, and I cast
> the info pointer to point to that type. And then the “additional”
> variable-length array can contain pointers to additional data,
> depending on the event type.

That is not much OO as you have all alternatives static. An Ada 
programmer might tend to use a variant record and enumeration for the case.

But for the OO approach:

    function F return Abstract_Packet'Class is
    begin
       case Kind_Of is
          when Foo =>
             return Foo_Packet; -- Derived from Abstract_Packet
          when Bar =>
             return Bar_Packet; -- Derived from Abstract_Packet
       ...

Note also that one can return instances not knowing the specific type at 
all. E.g. you can dispatch on the bare tag or an argument. In the latter 
case the derived type registers itself in a mapping value -> 
constructing function. The client simply calls the function from the 
mapping and gets a class-wide object.

-- 
Regards,
Dmitry A. Kazakov
http://www.dmitry-kazakov.de

  reply	other threads:[~2025-08-28  8:24 UTC|newest]

Thread overview: 125+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2025-08-18 10:29 In precision typing we trust Kevin Chadwick
2025-08-18 11:08 ` Dmitry A. Kazakov
2025-08-18 13:59   ` Niocláisín Cóilín de Ghlostéir
2025-08-18 15:03     ` Dmitry A. Kazakov
2025-08-18 22:52       ` Niocláisín Cóilín de Ghlostéir
2025-08-19  6:24       ` J-P. Rosen
2025-08-19  7:29         ` Dmitry A. Kazakov
2025-08-20  0:41           ` Lawrence D’Oliveiro
2025-08-20 15:49           ` Kevin Chadwick
2025-08-20 19:00             ` Dmitry A. Kazakov
2025-08-20  0:40         ` Lawrence D’Oliveiro
2025-08-20 13:59           ` Niocláisín Cóilín de Ghlostéir
2025-08-20 14:58             ` Dmitry A. Kazakov
2025-08-20 17:18               ` Niocláisín Cóilín de Ghlostéir
2025-08-20 19:04                 ` Dmitry A. Kazakov
2025-08-20 20:38                   ` Niocláisín Cóilín de Ghlostéir
2025-08-20 21:59                     ` Lawrence D’Oliveiro
2025-08-20 23:37                       ` Niocláisín Cóilín de Ghlostéir
2025-08-21 21:37                         ` Lawrence D’Oliveiro
2025-08-21  1:31                     ` Keith Thompson
2025-08-20 18:10       ` Niklas Holsti
2025-08-20 18:54         ` Kevin Chadwick
2025-08-22  1:27           ` Alastair Hogge
2025-08-22 12:49             ` Kevin Chadwick
2025-08-22 22:13               ` Lawrence D’Oliveiro
2025-08-22 23:21                 ` Niocláisín Cóilín de Ghlostéir
2025-08-23 22:58                   ` Lawrence D’Oliveiro
2025-08-24  8:37                     ` Dmitry A. Kazakov
2025-08-24 11:05                       ` Niocláisín Cóilín de Ghlostéir
2025-08-24 12:59                         ` Dmitry A. Kazakov
2025-08-24 21:51                           ` Lawrence D’Oliveiro
2025-08-24 21:50                       ` Lawrence D’Oliveiro
2025-08-25  8:19                         ` Dmitry A. Kazakov
2025-08-25  8:51                           ` Paul Rubin
2025-08-25 10:41                             ` Dmitry A. Kazakov
2025-08-25 17:12                               ` Paul Rubin
2025-08-25 20:09                                 ` Dmitry A. Kazakov
2025-08-25 21:13                                   ` Lawrence D’Oliveiro
2025-08-26  7:59                                     ` Dmitry A. Kazakov
2025-08-27  0:13                                       ` Lawrence D’Oliveiro
2025-08-27  7:39                                         ` Dmitry A. Kazakov
2025-08-27 23:10                                           ` Lawrence D’Oliveiro
2025-08-27 23:49                                             ` Dmitry A. Kazakov
2025-08-28  0:35                                               ` Lawrence D’Oliveiro
2025-08-28  7:54                                                 ` Dmitry A. Kazakov
2025-08-28  8:50                                                   ` Kevin Chadwick
2025-08-28  9:02                                                     ` Dmitry A. Kazakov
2025-08-25 21:27                                   ` Paul Rubin
2025-08-26  7:27                                     ` Lawrence D’Oliveiro
2025-08-25 21:10                           ` Lawrence D’Oliveiro
2025-08-26  8:14                             ` Dmitry A. Kazakov
2025-08-26 16:48                               ` Paul Rubin
2025-08-26 17:01                                 ` Kevin Chadwick
2025-08-26 19:43                                   ` Dmitry A. Kazakov
2025-08-27  0:00                                   ` Paul Rubin
2025-08-27  0:14                                     ` Lawrence D’Oliveiro
2025-08-27  7:51                                     ` Dmitry A. Kazakov
2025-08-27 20:45                                       ` Keith Thompson
2025-08-28  8:38                                         ` Dmitry A. Kazakov
2025-08-28  9:00                                           ` Von Ottone
2025-08-27 23:16                                       ` Lawrence D’Oliveiro
2025-08-28  8:48                                         ` Dmitry A. Kazakov
2025-08-29  3:57                                           ` Lawrence D’Oliveiro
2025-08-29  7:53                                             ` Dmitry A. Kazakov
2025-08-30 22:29                                               ` Lawrence D’Oliveiro
2025-08-31  8:56                                                 ` Dmitry A. Kazakov
2025-08-28 12:25                                     ` Björn Persson
2025-08-28 22:14                                       ` Lawrence D’Oliveiro
2025-08-29 15:30                                         ` Björn Persson
2025-08-30  3:34                                           ` Lawrence D’Oliveiro
2025-08-30  8:49                                             ` Kevin Chadwick
2025-08-30 22:34                                               ` Lawrence D’Oliveiro
2025-08-27  0:09                                   ` Lawrence D’Oliveiro
2025-08-27  9:06                                     ` Kevin Chadwick
2025-08-26 19:36                                 ` Dmitry A. Kazakov
2025-08-27  0:10                                   ` Lawrence D’Oliveiro
2025-08-27  7:57                                     ` Dmitry A. Kazakov
2025-08-27 23:12                                       ` Lawrence D’Oliveiro
2025-08-28  0:07                                         ` Dmitry A. Kazakov
2025-08-28  0:38                                           ` Lawrence D’Oliveiro
2025-08-28  8:00                                             ` Dmitry A. Kazakov
2025-08-26  9:06                             ` Dmitry A. Kazakov
2025-08-23  0:26                 ` Kevin Chadwick
2025-08-23 22:59                   ` Lawrence D’Oliveiro
2025-08-23 23:58                     ` Kevin Chadwick
2025-08-24 21:49                       ` Lawrence D’Oliveiro
2025-08-25  8:19                         ` Dmitry A. Kazakov
2025-08-25 20:58                           ` Lawrence D’Oliveiro
2025-08-27  9:01                             ` Kevin Chadwick
2025-08-27  9:24                               ` Dmitry A. Kazakov
2025-08-27 23:07                                 ` Lawrence D’Oliveiro
2025-08-28  0:00                                   ` Dmitry A. Kazakov
2025-08-28  0:22                                     ` Lawrence D’Oliveiro
2025-08-28  0:11                                   ` Kevin Chadwick
2025-08-28  0:20                                     ` Kevin Chadwick
2025-08-28  0:33                                       ` Lawrence D’Oliveiro
2025-08-28  1:17                                         ` Alex // nytpu
2025-08-28  1:45                                           ` Lawrence D’Oliveiro
2025-08-28  8:24                                             ` Dmitry A. Kazakov [this message]
2025-08-29  3:53                                               ` Lawrence D’Oliveiro
2025-08-29  8:07                                                 ` Dmitry A. Kazakov
2025-08-30 22:27                                                   ` Lawrence D’Oliveiro
2025-08-31  9:15                                                     ` Dmitry A. Kazakov
2025-08-28  9:17                                             ` Kevin Chadwick
2025-08-29  3:51                                               ` Lawrence D’Oliveiro
2025-08-29  9:27                                                 ` Kevin Chadwick
2025-08-29  9:33                                                   ` Kevin Chadwick
2025-08-30  6:21                                                     ` Lawrence D’Oliveiro
2025-08-31  0:43                                                       ` Kevin Chadwick
2025-08-31  7:30                                                         ` Lawrence D’Oliveiro
2025-08-31  8:51                                                           ` Kevin Chadwick
2025-08-28  9:04                                         ` Kevin Chadwick
2025-08-29  3:55                                           ` Lawrence D’Oliveiro
2025-08-29  9:41                                             ` Kevin Chadwick
2025-08-30  3:31                                               ` Lawrence D’Oliveiro
2025-08-28  9:05                                         ` Kevin Chadwick
2025-08-28  9:43                                           ` Dmitry A. Kazakov
2025-08-29  3:54                                             ` Lawrence D’Oliveiro
2025-08-29  8:15                                               ` Dmitry A. Kazakov
2025-08-30 22:25                                                 ` Lawrence D’Oliveiro
2025-08-31  9:26                                                   ` Dmitry A. Kazakov
2025-08-28  0:30                                     ` Lawrence D’Oliveiro
2025-08-20 19:10         ` Niocláisín Cóilín de Ghlostéir
2025-08-18 23:27   ` Lawrence D’Oliveiro
2025-08-18 23:46     ` Kevin Chadwick
replies disabled

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