Fallback 'catch-all' template functions
Enamex via Digitalmars-d
digitalmars-d at puremagic.com
Thu Sep 1 04:31:03 PDT 2016
On Thursday, 1 September 2016 at 05:37:50 UTC, Manu 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.
An easy workaround with a bit of boilerplate would be:
void f(T)(T t) {
static if(isSomething!T) {
// special impl
}
else {
fallback_f(t);
}
}
void fallback_f(T)(T t) { ... }
More information about the Digitalmars-d
mailing list