问题
我正在编写一个性能非常重要的应用程序。(特别是:光线追踪器)
我想在我的程序中有一个名为“自适应超级采样”的选项。实现起来相当简单,但我想有一个选项来打开或关闭它。
不幸的是,我只看到两个选项,它们是:
将 if/else 放在两个单独的过程(非常相似)周围,如下所示:
void renderLoop() { if(adaptive) { doAdaptiveLoop(); } else { doNormalLoop(); } }
将专门的 if/else 语句分散在代码周围。
void renderLoop() { if(adaptive) something(); else somethingElse(); for(int i = 0; i < LOOP_1; i++) { if(adaptive) something1(); else somethingElse1(); for(int j = 0; j < LOOP_2, j++) { if(adaptive) something2(); else somethingElse2(); } } //... So on and so forth }
这两种方法都相当糟糕。方法一重复了很多代码,方法二既杂乱又低效。它们都使得添加许多功能变得非常困难。如果我想添加更多功能,我必须在方法 1 中以阶乘率添加更多 if/else 语句,而在方法 2 中以非常混乱的方式添加。
问题
我在性能相关的应用程序中多次遇到这个问题,但我从来没有真正能够解决它。
问题是:如何向我的程序添加可切换的功能,该程序以许多循环为中心,其性能会因许多布尔测试而降低,并且其代码会因这些测试而变得混乱?