这个问题是一种设计问题。基本上我常常会得到一个执行高计算的函数,但是在它的中间有一个if语句,这对整个程序的性能有很大的影响。
考虑这个例子:
void f(bool visualization)
{
while(...)
{
// Many lines of computation
if (visualization)
{
// do the visualization of the algorithm
}
// More lines of computation
}
}
这个例子中的问题是,如果bool visualization
设置为false,我想程序将检查它是否为循环的每次迭代都是真的。
一个解决方案就是创建两个单独的函数,包括和不使用可视化:
void f()
{
while(...)
{
// Many lines of computation
// More lines of computation
}
}
void f_with_visualization()
{
while(...)
{
// Many lines of computation
// do the visualization of the algorithm
// More lines of computation
}
}
所以现在我没有if
检查。但它产生了另一个问题:我的代码混乱并且它违反了DRY。
我的问题是:有没有办法更好地做到这一点,而无需复制代码?或者C ++编译器优化器可能会检查我想要执行的函数版本(使用bool = true或bool = false)然后创建一个虚拟函数,而不用这个if
检查本身(就像我自己创建的那样)?
您可以在bool参数上模拟函数并使用if constexpr
。像这样:
template<bool visualization>
void f_impl()
{
while(...)
{
// Many lines of computation
if constexpr (visualization)
{
// do the visualization of the algorithm
}
// More lines of computation
}
}
void f(bool visualization)
{
if (visualization)
f_impl<true>();
else
f_impl<false>();
}