@DjTolib

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

void foo1();
void foo2();

void foo(int n){
  // На вход ф-я гарантированно получает 1 или 2
  // В зависимости от этого нужно вызвать первую или вторую функцию
  // Условные операторы, сравнения, свитч нельзя использовать. 
}
  • Вопрос задан
  • 174 просмотра
Решения вопроса 1
gbg
@gbg Куратор тега C++
Любые ответы на любые вопросы
Засунуть адреса функций в массив, выбирать функцию по индексу.

С синтаксисом предлагаю разобраться самостоятельно.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
@rPman
Решение тебе уже сказали - определить функции в массив/map каждую соответственно значению и вызывать.

Альтернативы не будет. Имя функции не попадает по стандарту в итоговый бинарник, это временная сущность, а значит по имени (сформировав ее к примеру 'func'+n) вызвать никак не получится, но есть исключения, например если требуемые функции - экспортируемые (для dll например), соответственно в зависимости от целевой ОС использовать win32 GetModuleHandle/GetProcAddress, для linux гугл подсказывает dlopen/dlsym.

Так же можно попробовать проанализировать отладочную информацию, которая будет сохранена в exe-шнике или рядом в файле, само собой код должен быть собран в режиме debug.

но это страшнейший быдлокод
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы