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

Ved M спросил: 12 мая 2018 в 04:00 в: c++

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

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


2 ответа

Slava ответил: 12 мая 2018 в 04:08

Вы можете использовать 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.

François Andrieux ответил: 12 мая 2018 в 04:18
Это похоже на очень крутой способ сделать что-то очень простое.
Slava ответил: 12 мая 2018 в 04:27
Это то, что хочет OP, я не хочу подвергать сомнению его / ее требования
JeJo ответил: 12 мая 2018 в 04:25

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

Вы можете вернуть функцию 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;
}
R Sahu ответил: 12 мая 2018 в 04:17
Если я понимаю, что спрашивает OP, они хотели бы видеть case 1: return fun1(); case 2: return fun2();