gpt4 book ai didi

c++ - 函数的两个变体,中间有一个简单的 if 语句

转载 作者:行者123 更新时间:2023-11-28 04:23:12 25 4
gpt4 key购买 nike

这个问题是一种设计问题。基本上我经常十到结束一个执行高计算的函数,但它中间某处有一个 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>();
}

关于c++ - 函数的两个变体,中间有一个简单的 if 语句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54988516/

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