Как скомпилировать функцию для нескольких значений параметра, известного во время компиляции

Я пишу функцию C ++, которая в данный момент получает параметр через шаблон. Функция сложная, но чтобы упростить вопрос, рассмотрим такую ​​функцию:

template <int a> int foo(int b){
return a+b;
}

Но в финальной программе a в вышеупомянутой функции будет известна во время выполнения (не во время компиляции), однако пользователь вынужден предоставить a в диапазоне от 1 до 5. Другими словами, я могу не знать a точно во время компиляции, но я уверен, что a будет один из 1, 2, 3, 4 или 5.
Как я могу скомпилировать выше функцию 5 раз каждый для разных a и во время выполнения выбрать, чтобы запустить правильный?
Одним из решений является определение разных версий foo лайк foo_1, foo_2… составлен для разных as, но это, очевидно, увеличивает объем копируемого кода, особенно когда функция большая. Есть ли лучшее решение?

РЕДАКТИРОВАТЬ
Моя цель состоит в том, чтобы избежать что-то вроде ниже и есть switch во время выполнения решения, какой из них использовать.

int foo_1(int b){
return 1+b;
}
int foo_2(int b){
return 2+b;
}
int foo_3(int b){
return 3+b;
}
int foo_4(int b){
return 4+b;
}
int foo_5(int b){
return 5+b;
}

1

Решение

Нечто подобное приходит на ум:

template <int a> int foo_impl(int b){
return a+b;
}

int (*foos[5])(int) = {
foo_impl<1>,
foo_impl<2>,
foo_impl<3>,
foo_impl<4>,
foo_impl<5>
};

int foo(int a, int b)
{
return (foos[a-1])(b);
}

Я надеюсь, что в вашем реальном коде есть реальная выгода для этого 🙂

4

Другие решения


По вопросам рекламы [email protected]