問題
パフォーマンスが非常に重要なアプリケーションを作成しています。(具体的には、レイトレーサー)
プログラムに「適応スーパーサンプリング」と呼ばれるもののオプションが必要です。実装はかなり簡単ですが、オンまたはオフにするオプションが必要です。
残念ながら、次の 2 つのオプションしか表示されません。
次のように、if/else を 2 つの別個の手順 (かなり似ています) に配置します。
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 は多くのコードを繰り返しますが、方法 2 は面倒で非効率的です。どちらも、多くの機能を追加することを非常に困難にします。さらに機能を追加したい場合は、方法 1 では階乗率で if/else ステートメントを追加する必要があり、方法 2 では非常に紛らわしい方法で追加する必要があります。
質問
パフォーマンスに依存するアプリケーションでこの問題に何度も遭遇しましたが、実際に解決できたことはありません。
質問は次のとおりです: 多くのループを中心とするプログラムにトグル可能な機能を追加するにはどうすればよいですか? 多くのブール値テストでパフォーマンスが低下し、それらのテストでコードが乱雑になりますか?