Fallback 'catch-all' template functions
H. S. Teoh via Digitalmars-d
digitalmars-d at puremagic.com
Thu Sep 1 08:40:53 PDT 2016
On Thu, Sep 01, 2016 at 03:37:50PM +1000, Manu via Digitalmars-d wrote:
> So, consider a set of overloads:
>
> void f(T)(T t) if(isSomething!T) {}
> void f(T)(T t) if(isSomethingElse!T) {}
> void f(T)(T t) {}
>
> I have a recurring problem where I need a fallback function like the
> bottom one, which should be used in lieu of a more precise match.
> This is obviously an ambiguous call, but this is a pattern that comes
> up an awful lot. How to do it in D?
>
> I've asked this before, and people say:
>
> void f(T)(T t) if(!isSomething!T && !isSomethingElse!T) {}
>
> Consider that more overloads are being introduced by users spread out
> across many modules that define their own kind of T; this solution is
> no good.
Here's a possible workaround:
void f(T)(T t)
{
static if (isSomething!T) { ... }
else static if (isSomethingElse!T) { ... }
else { ... }
}
But this won't work across modules. :-(
T
--
The early bird gets the worm. Moral: ewww...
More information about the Digitalmars-d
mailing list