Я хочу создать функцию, которая будет зацикливаться, пока пользователь не введет правильный тип ввода. Я новичок в использовании шаблонов, но я предполагаю, что если я хочу проверить общий тип, тогда функция шаблона будет правильным инструментом для использования. Я хочу, чтобы функция постоянно просила пользователя ввести ввод, пока тип не совпадет с типом модели.
Итак, это моя попытка (которая выдает ошибку: 'input': необъявленный идентификатор)
using namespace std;
template <typename T>
T check_input(T model_input, string message)
{
for (;;)
{
cout << message << endl;
T input; // will it make the input type the same type as model input used in the arg?
cin >> input;
// if valid input then for loop breaks
if (cin.fail())
{
// prompts that there was an error with the input and then loops again
cin.clear();
cin.ignore(numeric_limits<streamsize>::max(), '\n');
cout << "Invalid input, please try again" << endl;
}
else
{
break;
}
}
return input;
}
использование:
string model_type = "exp";
string exp_name = check_input(model_type, "Please enter the experiment name:");
Приведет ли неиспользуемый параметр модели к тому, что входная переменная будет того же типа?
(также это плохая практика программирования иметь неиспользуемый параметр?)
Есть ли более элегантный способ написания общего цикла проверки?
РЕДАКТИРОВАТЬ: Почему ошибка необъявленного идентификатора происходит в строке с «return input;»?