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 参数存在一些限制,可能会使此解决方案不是最优的,因此它可能适合您,也可能不适合您。