Is there a more elegant way of testing T for multiple types?

ag0aep6g via Digitalmars-d-learn digitalmars-d-learn at puremagic.com
Sat Jun 18 07:42:55 PDT 2016


On 06/18/2016 04:37 PM, Gary Willoughby wrote:
> Here I'm testing T is either a class or interface:
>
> void foo(T)(T bar) if (is(T == class) || is(T == interface))
> {
>      ...
> }
>
> Is there a more elegant way of testing T for multiple types? Because it
> doesn't scale well if I need to add more.
>
> I would love to use something like this:
>
> void foo(T)(T bar) if (T in [class, interface])
> {
>      ...
> }
>
> Is something like this currently possible using type tuples?

There's std.meta.staticIndexOf [1]. Use it like so:

void foo(T)(T bar) if (staticIndexOf!(T, int, float) >= 0) { ... }

Doesn't work with `class` or `interface`, though, because those are not 
types.



[1] https://dlang.org/phobos/std_meta.html#.staticIndexOf


More information about the Digitalmars-d-learn mailing list