On Wednesday, 4 December 2024 at 21:33:46 UTC, Salih Dincer wrote:
Maybe I'm misunderstanding...

Now I get it! In fact, we bind a chosen argument. This reveals the inadequacy of the name chosen for the library. I've made it better by adding a few lines of code:

```d
auto hello(T)(T a, T b, T c, T d, T e)
  => a~b~c~d~e;

enum msg { h = "h", e = "e", l = "l", o = "o" }

void main()
{
  with(msg)
  {
    assert(bindArgument!(hello, 0, h)(e,l,l,o) == "hello");
    assert(bindArgument!(hello, 1, e)(h,l,l,o) == "hello");
    assert(bindArgument!(hello, 2, l)(h,e,l,o) == "hello");
    assert(bindArgument!(hello, 3, l)(h,e,l,o) == "hello");
    assert(bindArgument!(hello, 4, o)(h,e,l,l) == "hello");

    alias Fun = bindArgument!(hello, 5, e);
    //Fun(h, l, l, o).writeln; //error
  }
}

template bindArgument(alias func, size_t N, fixedArgs...)
{
  static auto bindArgument(A...)(A argsRest)
  if(N <= argsRest.length)
  {
    static if (N == 0)
      return func(fixedArgs[0], argsRest);
    else
      return func(argsRest[0 .. N],
                 fixedArgs[0],
                  argsRest[N .. $]);
  }
}
```

SDB@79


Reply via email to