使用C ++中相同的定义重载函数

时间:2013-10-10 14:22:37

标签: c++ overloading definitions

我通过使用不同的参数和定义了解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"; 
    }
}

如果仍然有两种相同代码的相同副本仍然用于两种参数类型,那么我可以显着缩短程序代码。我确信我不是唯一有这个问题的人,但我所有的搜索都是关于如何使用多个定义重载函数的解释。

非常感谢任何帮助或建议。

3 个答案:

答案 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)
{
..
}