Рассмотрима рабочего кода, который я написал:Шаблон рекурсии с помощью двоичного поиска
#include <iostream>
constexpr int MIN_FOO = 0, MAX_FOO = 100;
template <int N>
void foo() {std::cout << "foo<" << N << ">() called.\n";}
template <int N>
void foo (char, double, bool) {std::cout << "foo<" << N << ">(char, double, bool) called.\n";}
template <int Low, int High, typename... Args>
void searchFooBinary (int key, Args... args) {
// if (LOW > HIGH) {std::cout << "Error with searchFooBinary.\n"; return;}
constexpr int Mid = (Low + High) /2;
if (key == Mid)
foo<Mid>(std::forward<Args>(args)...); // Want to generalize this using 'f'.
else if (key < Mid)
searchFooBinary<Low, Mid - 1>(key, std::forward<Args>(args)...);
else
searchFooBinary<Mid + 1, High>(key, std::forward<Args>(args)...);
}
template <typename... Args>
void executeFooBinarySearch (int n, Args... args) {
searchFooBinary<MIN_FOO, MAX_FOO>(n, std::forward<Args>(args)...);
}
int main() {
executeFooBinarySearch(99);
executeFooBinarySearch (99, 'a', 1.5, true);
}
Так foo
функция шаблона и здесь проходит время выполнения INT и searchFooBinary
использует бинарный поиск, чтобы найти правильное значение INT для аргумент шаблона. Пока что так хорошо, но я не хочу писать эту функцию двоичного поиска для каждой новой функции, например foo
. Как обобщить использование foo
в searchFooBinary
в общем f
? Если указатель функции шаблона не разрешен, каково было бы обходным путем для достижения этой цели?