我正在尝试计算用户传递的两个数值的绝对值,但允许用户输入多种数据类型(即整数和 double 数或char和浮点数)。我最初的想法是使用类似这样的函数:

template <class T1, class T2>
void findAbs(const T1& var1, const T2& var2)
{
    cout<<"Enter two numbers: "<<endl;
    cin>>var1>>var2;

   cout<<abs(var1)<<" "<<abs(var2)<<endl;
}

如果这是正确的方法,那么我不知道如何在main函数中调用它,因为似乎我不得不将参数声明为一种或另一种数据类型。任何帮助将非常感激!

最佳答案

首先,您的示例将无法编译,因为您要通过const-reference来获取参数,然后尝试从流中读取它们。您应该改为通过非常量引用来获取它们。

修复此问题后,您可以简单地使用如下功能:

int main()
{
  int i;
  float f;
  double d;
  char c;

  findAbs(i, f);
  findAbs(c, d);
  findAbs(d, i);
  //etc.
}

当然,必须在每个调用站点中知道参数的类型。模板是纯粹的编译时构造。如果您希望以某种方式使用模板来区分最终用户输入的c42-3.14,则不能,因为那是运行时信息。

10-04 14:41
查看更多