Simple overloading without complications

Meta via Digitalmars-d-learn digitalmars-d-learn at puremagic.com
Tue Jul 12 11:52:08 PDT 2016


On Tuesday, 12 July 2016 at 04:23:07 UTC, Adam Sansier wrote:
> Now, I could simply make Do a template method but then this 
> prevents it being a virtual function.
>
> void Do(T)(T name) if (is(T == string) || is(T == int))
> {
>     Init_Data();
>
>     static if (is(T == string))
>     {
>         ...Get index from name
>     }
>
>     ....
> }

You could always use std.variant.algebraic which implements 
runtime polymorphism:

import std.algebraic;

alias intOrString = Algebraic!(int, string);

void Do(intOrString indexOrName)
{
     Init_Data();

     int index = indexOrName.visit!(
         (int i) => i,
         (string s) => getIndexByName(s),
     );

     ....
}


More information about the Digitalmars-d-learn mailing list