3

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

如果有办法解决必须拥有相同代码的两个相同副本同时仍用于两种参数类型的方法,那么我可以显着缩短程序的代码。我确定我不是唯一遇到这个问题的人,但我所有的搜索都返回了关于如何使用多个定义重载函数的解释。

任何帮助或建议将不胜感激。

4

3 回答 3

3

最好的(也是唯一的?)解决方案是使用模板

于 2013-10-10T14:28:15.200 回答
2

模板很有用:

template <typename T>
void Input (T &Ref)
{
   ...
}


std::string s;
int i;
float f;

Input(s);
Input(i);
Input(f);
于 2013-10-10T14:37:21.180 回答
2
template<class T>
void Input(T& ref)
{
..
}
于 2013-10-10T14:39:26.960 回答