0

以下のテンプレート

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つを統一する方法はありますか?

編集:これは、コンパイラがこのケースに適用できる最適化よりも、テンプレート、または必要に応じてテンプレートの悪用に関するものです。

4

1 に答える 1

1

絶対に何もしないでください。コンパイラは、すべてを最適化するのに十分です。

于 2013-10-02T14:08:13.913 に答える