gpt4 book ai didi

templates - 从模板返回动态 AliasSeq

转载 作者:行者123 更新时间:2023-12-02 07:25:10 24 4
gpt4 key购买 nike

我正在尝试编写一个模板,该模板将从函数的 AliasSeq 返回返回类型的 AliasSeq。但是在我尝试编译它的代码中,它告诉我 Error: type (...) has no value

这是我目前的代码:

template ReturnTypesFromFunctions(Functions...)
{
auto ReturnTypesFromFunctions()
{
alias functions = AliasSeq!();
foreach(fn; Functions)
{
functions = AliasSeq!(functions, ReturnType!fn);
}
return functions;
}
}

基本上我要做的是自动生成一个 AliasSeq 数组:

int a();
bool b();
double c();

alias functions = AliasSeq!(a, b, c);
alias returnTypes = ReturnTypesFromFunctions!functions;
// returnTypes -> AliasSeq [int, bool, double]

但使用当前代码会导致这些错误:

Error: type (int) has no value
Error: type (bool) has no value
Error: type (double) has no value
Error: type () has no value

这可能与 auto 有关,因为编译器无法从函数别名中找到类型。但是,没有表示 AliasSeq 的类型,因为该函数本身用于查找类型,因此我可以在其他地方使用它。

最佳答案

一旦你定义了一个别名,你就不能修改它。您也不能从函数返回 AliasSeq,因为它们不是一流的值。

正确的方法是通过递归模板...

template ReturnTypesFromFunctions(Funcs...) {
static if(Funcs.length == 0)
alias ReturnTypesFromFunctions = AliasSeq!();
else
alias ReturnTypesFromFunctions = AliasSeq!(ReturnType!(Funcs[0]), ReturnTypesFromFunctions!(Funcs[1..$]));
}

...但是,在这种情况下,您只是重新发明了 staticMap 模板,因此只需使用它即可。

alias returnTypes = staticMap!(ReturnType, functions);

关于templates - 从模板返回动态 AliasSeq,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33467074/

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