discrimination of constructors with same number of parameters

Lutger Blijdestijn lutger.blijdestijn at gmail.com
Thu Dec 30 07:27:24 PST 2010


spir wrote:

(...)
> 
> I like very much the template mixin solution. Would there be any
> difference in inheriting an interface (or even a plain type)? Also, can
> one presently rewrite this in D without _string_ mixin inside the
> template? (Else this solution is simply not acceptable for me: I'm
> allergic to code in strings; but don't ask me why ;-)
> 
> Denis
> -- -- -- -- -- -- --
> vit esse estrany ☣
> 
> spir.wikidot.com

Compared to inheriting interfaces: 
- works with primitive and struct types
- no dynamic polymorphism
- no performance penalty, likely less code size

You can do it without string mixins by explicitly writing the code the mixin 
automates. This should also work more or less, but I find it less clear:

struct NewType(T, string typename)
{
    alias T this;
    T base;
    @disable void opAssign(T) {}
}

The typename parameter is arbitrary here, just to create a seperate type for 
each possible value. It might as well be an integer. 

alias NewType!(int, "Position") Position;
void func(Position position) { ... }

or used directly:

void func(Newtype!(int, "Position") position) { ... }



More information about the Digitalmars-d-learn mailing list