Перегрузка функции с использованием идентичных определений в переполнении стека

Я знаю о процессе перегрузки функций в C ++ посредством использования различных параметров и определений. Однако, если у меня есть две функции, которые идентичны, кроме их параметров, есть способ получить это определение только один раз.

Функции, которые я использовал, должны проверять правильность ввода (т.е. вводится число, а не символ). Один для int, а другой для поплавка. Из-за этого и того факта, что я передаю переменную по ссылке, определения абсолютно идентичны.

Ниже описаны две функции:

void        Input       (float &Ref);
void        Input       (int &Ref);

И тогда они разделяют общее определение:

Function_Header
{
static int FirstRun = 0;            // declare first run as 0 (false)

if (FirstRun++)                     // increment first run after checking for true, this causes this to be missed on first run only.
{                                       //After first run it is required to clear any previous inputs leftover (i.e. if user entered "10V"// previously then the "V" would need to be cleared.
std::cin.clear();               // clear the error flags
std::cin.ignore(INT_MAX, '\n'); // discard the row
}

while (!(std::cin >> Ref))          // collect input and check it is a valid input (i.e. a number)
{                                   // if incorrect entry clear the input and request re-entry, loop untill correct user entry.
std::cin.clear();               // clear the error flags
std::cin.ignore(INT_MAX, '\n'); // discard the row
std::cout << "Invalid input! Try again:\t\t\t\t\t";
}
}

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

Любая помощь или совет будет высоко ценится.

3

Решение

Шаблоны полезны:

template <typename T>
void Input (T &Ref)
{
...
}std::string s;
int i;
float f;

Input(s);
Input(i);
Input(f);
2

Другие решения

Лучшее (и единственное?) Решение — использовать шаблон

3

template<class T>
void Input(T& ref)
{
..
}
2
По вопросам рекламы ammmcru@yandex.ru
Adblock
detector