Defining type coercion

Simen kjaeraas simen.kjaras at gmail.com
Sun Feb 27 21:57:26 PST 2011


Peter Lundgren <lundgrpb at rose-hulman.edu> wrote:

> I'd like to define a type Ordinal which behaves like an int (using a  
> struct or
> alias) that represents the 26 letters, A-Z, with the numbers 1-26. Then,  
> I
> would like to be able to coerce between chars and Ordinals appropriately.
>
> chars and ints already have the ability to coerce between each other  
> using the
> appropriate ASCII values. So, really, I'd just like to define a type that
> overrides this behavior.
>
> As far as I can tell, the place to define such rules is with opCast!,  
> but I'm
> at a loss for how to add additional rules to built in types.

The D Programming Language (the book by Andrei) mentions that multiple
alias this be a possibility. Sadly, it has not yet found its way its way
into the actual implementation of the language.

With it, one would define what you ask for, approximately like this:

struct Ordinal {
     private int representation;
     char getChar( ) {
         return representation + 'a'-1;
     }
     alias representation this;
     alias getChar this;
}

But like I said, it currently does not work.

-- 
Simen


More information about the Digitalmars-d-learn mailing list