D 中的静态 if 表达式?
Static if expression in D?
如何在 D 中模拟静态 if 表达式(不是语句)?
auto foo = (({ static if (cond) { return altA; } else { return altB; })());
这有效,但如果嵌套委托,则会创建委托和 ldc 错误。我敢肯定它可以作为带有一些模板魔法的 expr 来完成,我只是还不够好。
我已经很长时间没有用 D 编写代码了,但是您是否尝试过将其作为变通方法?
static if (cond)
auto foo = altA();
else
auto foo = altB();
与 C++ 相反,这在 D 中是合法的
由于 static if
不会创建新范围,您可以这样做:
static if (cond)
auto foo = altA;
else
auto foo = altB;
// Use foo here as normal
foo.fun();
如果你真的想让它成为一个表达式,你可以这样做:
template ifThen(bool b, alias a, alias b) {
static if (b)
alias ifThen = a;
else
alias ifThen = b;
}
auto foo = ifThen!(cond, altA, altB);
alias
参数存在一些限制,可能会使此解决方案不是最优的,因此它可能适合您,也可能不适合您。
如何在 D 中模拟静态 if 表达式(不是语句)?
auto foo = (({ static if (cond) { return altA; } else { return altB; })());
这有效,但如果嵌套委托,则会创建委托和 ldc 错误。我敢肯定它可以作为带有一些模板魔法的 expr 来完成,我只是还不够好。
我已经很长时间没有用 D 编写代码了,但是您是否尝试过将其作为变通方法?
static if (cond)
auto foo = altA();
else
auto foo = altB();
与 C++ 相反,这在 D 中是合法的
由于 static if
不会创建新范围,您可以这样做:
static if (cond)
auto foo = altA;
else
auto foo = altB;
// Use foo here as normal
foo.fun();
如果你真的想让它成为一个表达式,你可以这样做:
template ifThen(bool b, alias a, alias b) {
static if (b)
alias ifThen = a;
else
alias ifThen = b;
}
auto foo = ifThen!(cond, altA, altB);
alias
参数存在一些限制,可能会使此解决方案不是最优的,因此它可能适合您,也可能不适合您。