gpt4 book ai didi

d - 类型推断具有未知数量的已知类型参数的委托(delegate)参数

转载 作者:行者123 更新时间:2023-12-04 05:06:30 25 4
gpt4 key购买 nike

如果您定义一个接受委托(delegate)的函数,则 D 可以在您调用该函数时对委托(delegate)参数进行类型推断。所以如果我写一个带有签名的函数:

void foo(void delegate(int,string) dlg)

我可以使用以下方法调用它:
foo((a,b){});

D 会推断出 aintbstring .

但是,如果我事先不知道代表将有多少个参数怎么办?如果我写
void foo(T...)(void delegate(T) dlg)

我可以打电话:
foo((int a,string b,char c,boolean d){});

但是我必须为每个参数指定类型。

现在,我想要 foo通过 接受委托(delegate)任意 参数的数量 - 所有相同的类型。所以我可以打电话:
foo((a,b,c,d,e,f,g){});

D 会推断出 ag都是 string s。

请注意,我需要的是 不是 一个可变函数。 dlg本身不接受任何数量的参数,它是 foo接受带有任意数量参数的委托(delegate)。

可以在D中做到这一点吗?

编辑 :
实际上,如果我可以定义一个默认参数会更好,所以我可以写
foo((a,b,int c,d){});

a , bd将是字符串,而 c将是 int .

最佳答案

这可能是一个增强请求。但是现在你可以在编译时将它作为别名传递:

import std.stdio;

void foo(alias dlg)()
{
dlg(1, 2.0, [3], "a");
dlg(1.0, 2, [[3]], "b");
}

void main()
{
foo!((a, b, c, d) { writefln("%s %s %s %s", a, b, c, d); } )();
}

关于d - 类型推断具有未知数量的已知类型参数的委托(delegate)参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15479707/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com