我通过使用不同的参数和定义了解C ++中函数重载的过程。但是,如果我有两个与它们的参数相同的函数,那么有一种方法只能有一次这个定义。
我使用的功能是检查输入是否正确(即输入的字符数不是字符)。一个是int,另一个是float。由于这一点以及我通过引用传递变量的事实,定义完全相同。
两个函数声明如下:
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";
}
}
如果仍然有两种相同代码的相同副本仍然用于两种参数类型,那么我可以显着缩短程序代码。我确信我不是唯一有这个问题的人,但我所有的搜索都是关于如何使用多个定义重载函数的解释。
非常感谢任何帮助或建议。
答案 0 :(得分:3)
最好(也是唯一?)解决方案是使用模板
答案 1 :(得分:2)
模板很有用:
template <typename T>
void Input (T &Ref)
{
...
}
std::string s;
int i;
float f;
Input(s);
Input(i);
Input(f);
答案 2 :(得分:2)
template<class T>
void Input(T& ref)
{
..
}