パフォーマンス重視のコードパスの中核となるクラスがありますので、可能な限り最適化しようとしています。するために使用クラス:同じ種類のC++テンプレートオブジェクトを格納する
class Widget
{
Widget(int n) : N(n) {}
.... member functions that use the constant value N ....
const int N; // just initialized, will never change
}
コンストラクタの引数はコンパイル時に知られているので、Nは関数にコンパイルすることができるように、私は、テンプレートにこのクラスを変更しました:
template<int N>
class Widget
{
.... member functions that use N ....
}
は、私が法と別のクラスがあります:私はもうこのような関数を定義することはできませんので
Widget & GetWidget(int index);
をしかし、ウィジェットをテンプレート化した後、各ウィジェットは異なるタイプがあります。私は異なる継承オプションを考慮しましたが、テンプレートからのパフォーマンス向上が継承された関数呼び出しのコストを上回るかどうかはわかりません。
SO、私の質問はこれです:
私は両方の世界(コンパイル時/実行時)の最善の希望はかなり確信している、それができない場合があります。しかし、コンパイル時にNを知るというパフォーマンスを得る方法はありますか?それでも同じ種類のWidgetsを返すことはできますか?
ありがとうございます!
+1は "どちらも試してみてください"です。特定のNに対して複数の関数を持たせることは、libfftwの実装が性能を助ける場合があるという事例の1つです。 - (2 * M_PI/n)の 'cos'と' sin'の値を格納することができます。ある意味、定数として。 – aschepler