как передать управление от одной функции к другой в C ++ - PullRequest
0 голосов
/ 05 июня 2018

Как передать управление от одной функции к другой в C ++?

По сути, у меня есть функция A, которая принимает ввод от пользователя и вызывает функцию по выбору пользователя.это можно просто сделать, вызвав нужную функцию, используя конструкцию case switch, но при этом элемент управления перейдет к другой функции и после ее выполнения вернется к функции A, но я этого не хочу.Функция A должна быть прервана во время вызова другой функции.

Ответы [ 2 ]

0 голосов
/ 05 июня 2018

Если я правильно понял, вы можете сделать следующее:

Вы можете вернуть функцию A, передав пользовательский ввод другой функции (other_functions_here(int& user_input)), где вы будете обрабатывать случаи переключения/ другие мелкие функции в соответствии с пользовательским вводом.

Таким образом, вы можете просто вызвать function_A() в основном просто следующим образом.

Однако вы должны быть очень осторожны с исключениями, чтовам, возможно, придется столкнуться при кодировании таким образом.Кроме того, отладка также будет затруднена.

#include <iostream>

int fun1() {  return 1; }
int fun2() {  return 2; }

int other_functions_here(int& user_input)
{
   switch(user_input)
   {
      case 1: return fun1();
      case 2: return fun2();
   }
   return -1;
}

int funcction_A()
{
   int some_value;
   std::cin >> some_value;

   return other_functions_here(some_value);
}

int main()
{
   int result = funcction_A();
   (result != -1) ? std::cout <<  result :
                    std::cout << "Invalide user input" << std::endl;
   return 0;
}
0 голосов
/ 05 июня 2018

Вы можете использовать std::function для этого:

void B();
void C( int );

std::function<void()> A()
{
    switch( userInput() ) {
       case 'B' : return &B;
       case 'C' : return std::bind( C, 123 );
    }
    return std::function<void()>{};
}

int main()
{
    auto f = A();
    if( f ) f();
}

, это будет выполнять либо функцию B(), либо C(123) на основе пользовательского ввода после завершения A.

...