enum inheritance

bearophile bearophileHUGS at lycos.com
Fri Aug 2 07:14:07 PDT 2013


JS:

> It would be nice to be able to use enums in a hierarchical way:
>
> enum colors
> {
>      enum Red { RedOrange, ... }
>      enum Green { GreenBlue, ...}
>      enum Blue { BlueYellow, ... }
> ...
> }
>
> which would be the same as the flattened version,
>
> enum colors
> {
>    Red, RedOrange, ..., Green, GreenBlue, ..., Blue, 
> BlueYellow, ..., ...
> }
>
> but we could dereference such as
>
> colors.Red.RedOrange,
> colors.Blue,
> colors.Green.GreenBlue,
>
> (This isn't a great example but demonstrates what I would like 
> to be able to do)
>
> Is anything like this possible?

In Ada you can define ranged types, and there is a keyword to 
define their subtypes:

type Day is
    (Monday,
     Tuesday,
     Wednesday,
     Thursday,
     Friday,
     Saturday,
     Sunday);

-- Derived types, they are new incompatible with the original:
type Business_Day is new Day range Monday .. Friday;
type Weekend_Day is new Day range Saturday .. Sunday;

-- Subtypes that convert implicitly to their supertype:
subtype Business_Day is Day range Monday .. Friday;
subtype Weekend_Day is Day range Saturday .. Sunday;
subtype Dice_Throw is Integer range 1 .. 6;

The Ada compiler enforces static typing where possible, and uses 
dynamic tests where it can't (and the dynamic tests can be 
disabled with a compiler switch). So if assign a generic integer 
to a Dice_Throw, the Ada compiler performs a run-time test to see 
if it's in the correct range.

Ada code is based on similar things that avoid/catch lot of bugs.

Bye,
bearophile


More information about the Digitalmars-d-learn mailing list