以下のテンプレート
template<typename Data, typename Number>
int compute(Data d, Number n) {
if(n > 10) SLOW(d)
if(n < 30) EXPENSIVE(d)
if(n < -10) .. if(..) // etc.
return d.abc();
}
Number n
動的に計算された:で呼び出されるcompute(data, runtime_number)
こともあれば、コンパイル時に既知のパラメーター: で呼び出されることもありますcompute(data, 3)
。
コンパイラが後者のケース (インラインの有無にかかわらず) を最適化することを信頼していないが、if(false)
ブロックを削除するのに十分信頼している場合、多くのコードを複製してcompute<12>(data)
テンプレートを作成する必要があります。コードの重複は別として、compute(data, number)
より使いやすく、より直感的に使用できます。
この2つを統一する方法はありますか?
編集:これは、コンパイラがこのケースに適用できる最適化よりも、テンプレート、または必要に応じてテンプレートの悪用に関するものです。