On Friday, 8 July 2022 at 12:20:13 UTC, ryuukk_ wrote:
I'm not sure how to phrase it so it'll try with code

I have this piece of code that i would like to improve, right now i have to create bunch of duplicates

```D
    void view_it(A, B)(void function(entity_t, A*, B*) cb)
    {
        foreach(it, e; view!(Includes!(A, B)))
        {
            auto a = it.get!(A)(e);
            auto b = it.get!(B)(e);
            cb(e, a, b);
        }
    }
```

The problem when i try to introduce variadic template, is i can't seem to understand how to unwrap the parameter as pointer type T -> T*


```D
struct Includes(Args...) { alias args = Args; }

void view_it(Includes)(void function(entity_t, Includes.args* ) cb)
{
    // do stuff
}

```

I get the following:

```Error: cannot have pointer to `(EEntityRemoved)```

Anyone got an idea?

Thanks!

I suppose you could do something like this:

```d
template Includes(Args...)
{
   template Recurse(Arg...)
   {
      import std.meta: AliasSeq;
      static if (1 == Arg.length)
        alias Recurse = AliasSeq!(Arg[0]*);
      else
        alias Recurse = AliasSeq!(Arg[0]*, Recurse!(Arg[0..$]);
   }

   alias Includes = Includes!(Args);
}
void view_it(Args...)(void function(entity_t, Includes!(Args) )
```

Reply via email to