Rust泛型参数和编译时if



使用C++模板和if constexpr,我发现了一个我非常喜欢的技巧:假设你有一个函数,它有一些已知的编译时可调选项,我可以编写类似的东西

template <bool Op1, bool Op2, bool Op3>
void my_func()
{
...
if constexpr (Op1) {
...
} else { 
...
}
... //similar (possibly even nested) constexpr
}

现在,我认为这在保存的代码行(有n个选项,一个有2^n个不同的函数(和性能方面都很方便,因为这些if是在编译时计算的(例如,假设这个函数通过循环中的委托被调用多次(。实际上,在编译过程中,会使用所有选项创建此函数的2^n个副本。

我对Rust做一些类似的事情很感兴趣。我注意到通用参数已经存在,但我不确定是否有等效的if constexpr。当然,我希望能找到其他更可靠的解决方案,具有相同的要求:没有不必要的运行时if,没有复制粘贴代码。

您可以使用简单的ifs。优化器几乎不可能不消除常量if falseif true。C++中if constexpr的唯一优点是,如果表达式的计算结果为false,则可以将无法编译的内容放在那里。

相关内容

  • 没有找到相关文章

最新更新