速度とメモリ使用量の点で互いにトレードオフする C 関数の 2 つのバージョンがあります。これらの関数は、複数のプログラムで共有される .cpp ファイルにあります。関数ポインターを使用して、2 つの実装を切り替えたり、それらの変更をプログラム内のすべてのファイルに適用したりしたいと考えています。
Combination.h(抜粋)
long chooseRecursive (int n, int r);
long chooseLookup (int n, int r);
void foo (int n, int r);
static long (*choose)(int, int) = chooseRecursive;
Combination.cpp(抜粋)
long chooseRecursive (int n, int r) { cerr << "Recursive\n"; }
long chooseLookup (int n, int r) { cerr << "Lookup\n"; }
void foo (int n, int r) { choose(n, r); }
Main.cpp (抜粋)
int main(int argc, char* argv []) {
choose = chooseLookup;
choose(10, 5);
foo(10, 5);
}
出力は次のとおりです。
Lookup
Recursive
foo 関数が chooseRecursive の代わりに chooseLookup を使用しないのはなぜですか? これを修正するにはどうすればよいですか? 同じ目標を達成するために使用できるより良いアプローチはありますか?
よろしくお願いします。