У меня есть две версии функции C, которые обмениваются друг с другом с точки зрения скорости и использования памяти. Эти функции находятся в файле .cpp, который используется совместно несколькими программами. Я хочу использовать указатель на функцию, чтобы я мог переключаться между двумя реализациями и выполнять эти изменения во всех файлах моей программы.Переключение между функциональными реализациями с указателями функций
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 не использует selectLookup вместо selectRecursive? Как это исправить? Есть ли лучший подход, который я могу использовать для достижения той же цели?
Заранее благодарю вас за помощь!
Для C++, вы можете посмотрите ['std :: function'] (http://en.cppreference.com/w/cpp/utility/functional/function). Это позволяет использовать функции-члены и лямбда-выражения. –