如何将数据类型传递给参数而不是变量

时间:2014-07-11 20:22:15

标签: c++ function parameter-passing type-conversion

我写了一个简单的输入验证函数来检查用户是否输入了正确的数据类型,如果没有,它会一直要求他们重新输入,直到他们这样做。现在这是我经常使用的东西,在大多数情况下我一次在多种数据类型上使用它。因此,有没有一种方法可以简单地将数据类型作为参数传递并在函数内部进行更改,而不是复制函数并更改方法中num的数据类型?

float cinInputValidation(){
    float num;
    while(!(cin>> num)){
        cout<< "Error: Invalid Input.\n"
        << "Please try again: ";
        cin.clear();    //  Clears cin flags if user enters variable of the wrong data type.
        cin.ignore(100, '\n');  //  Ignores up to 100 characters or until a new line.
    }
    return num;
}

现在我知道typeof()并且我有预感我可以将它用作参数,如此

cinInputValidation(typeof(float))

但是我如何处理函数数据类型本身和num变量的类型声明?或者这是不可能的。

1 个答案:

答案 0 :(得分:4)

正如@chris正确指出的那样,您可以将cinInputValidation()更改为函数模板,以便可以通过调用站点上的模板参数指定类型:

template<typename T>
T cinInputValidation() {
    T num;
    while (!(cin >> num)) {
        ...
    }
    return num;
}

稍后......

float f = cinInputValidation<float>();
double d = cinInputValidation<double>();