On 3/29/21 8:13 AM, Gavin Ray wrote:

> Brief question, is it possible to write this so that the "alias fn" here
> appears as the final argument?
>
> auto my_func(alias fn)(string name, string description, auto otherthing)

Yes, as a type template parameter but you would have to constrain the parameter yourself (if you care):

import std.stdio;
import std.traits;
import std.meta;

auto myFunc(F)(string name, F func)
{
  // This condition could be a template constraint but they don't
  // support error messages.
  static assert (is (Parameters!func == AliasSeq!(string)),
                 "'func' must be a callable that takes 'string'.");
  return func(name);
}

void main() {
  // One trouble with this "solution" is that for the compiler to
  // know the return type of the lambda, the parameter must be
  // declared as 'string' (in this case).
  writeln(myFunc("foo", (string a) => a ~ '.'));
}

Ali

Reply via email to