2015-06-11 1 views
-1

У меня есть файл с несколькими независимыми функциями стиля С, определенными в нем, причем каждая функция создает экземпляр класса и вызывает метод этого класса с определенными параметрами.Как передать переменную ввода методу класса C++, вызванному во многих местах на основе ввода пользователем?

Мне нужно получить от пользователя информацию о том, какую функцию вызывать, и какой параметр отправить в этом методе.

В основном мое требование заключается в следующем:

returnVal func1{ 
myClass obj; 
obj.method(x,y); 
} 

returnVal func2{ 
myClass obj; 
obj.method(x,y); 
} 

returnVal func3{ 
myClass obj; 
obj.method(x,y); 
} 

//the value of y will need to change based on user selecting YES or NO 

Очевидный, но утомительный способ поставить

if(userChoice == YES){ 
obj.method(x,y); 
} 
else{ 
obj.method(x); 
} 

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

Любая помощь приветствуется.

+0

Функции могут принимать параметры. –

+1

Существует несколько способов достижения чего-то подобного, но трудно сказать, какие ваши требования связаны с теми недействительными функциями, которые вы указали. Вы должны опубликовать какой-то реальный код, который демонстрирует вашу проблему. – TartanLlama

+0

_ "но проблема в том, что у меня слишком много таких funcX" _ Это ваша настоящая проблема. Исправьте это. –

ответ

0

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

returnType (func*)(); // Create a function pointer and use that 
switch(userInput){ 
    case 0: 
     func = &func1; 
     y = 5; 
    case 1: 
     func = &func2; 
     y = 6; 
} 

Для упрощения кода внутри каждой функции, вы можете использовать функцию обертку:

void callObjMethod(userInput, MyClass obj, x, y){ 
    userInput == YES ? obj.method(x,y) : obj.method(x); 
} 

Или даже просто поставить код из callObjMethod в каждой функции в зависимости от того, насколько сложным код.