d不能创建匿名模板

原文

void foo(alias callback)()
{
    callback!5;
}

static void print(int i)() { writeln(i); }
foo!print;

如何合并后2行为1行?
我不理解,但这好像工作:

void foo(alias callback)()
{
    import std.stdio : writefln;
    callback.writefln!"%s";
}

void main()
{
  auto i = [ 1, 2, 3 ];
  auto s = ["foo", "bar", "zoo"];

  foo!i;
  foo!s;

  foo!"hello, world!";

  enum a = 11, b = 22;
  foo!(a + b);
} /*
  [1, 2, 3]
  ["foo", "bar", "zoo"]
  hello, world!
  33
*/

匿名模板是不行的.

// 命名模板:
static void print(int i)() {
    import std;
    writeln(i);
}

void main() {
    foo!print;
}

因为有print才工作.匿名模板不行,像λ一样传递模板.

foo!((int i)() {
    import std;
    writeln(i);
});

'(int i)()'期望定义模板.

posted @ 2022-12-12 10:40  zjh6  阅读(14)  评论(0)    收藏  举报  来源