コンパイル時に一連の数値を計算し、それらを静的ベクトルとして格納することで、計算時間を節約しようとしています (ただし、今のところ、ランタイムの開始時に 1 回計算することに落ち着くかもしれません)。私がやろうとしていることの簡単な(コンパイルではない)例は次のとおりです。
#include <vector>
using namespace std;
static vector<vector<int> > STATIC_THING(4, vector<int>(4));
void Generator(int x, int y, vector<int> *output) {
// Heavy computing goes here
for(int i=0; i < 4; ++i)
(*output)[i] = x * y;
return;
}
static void FillThings() {
for(int x=0; x < 4; ++x)
for(int y=0; y < 4; ++y)
Generator(x, y, &STATIC_THING[x]);
}
FillThings();
int main() {
}
シーケンスを事前計算して配列にハードコーディングする以外に、コンパイラにこれを処理させる方法はありますか? 少なくとも、これが存在するヘッダーの最初の #include でこれを実行する方法があるはずですが、クラスでしか実行されていません。コンパイル時の計算が容易になる場合は、ベクトルの代わりに配列を使用できます。
編集:
テンプレートのメタプログラミングが提案されましたが、実際のジェネレーター アルゴリズムは複雑すぎて、この手法には向いていません。
ルックアップ テーブルを使用することは、実行時の計算を回避できる唯一の他のオプションのようです。今後もパフォーマンスが問題になる場合は、これに頼ります。