检查输入类型是否正确

Check if input is of correct type

本文关键字:是否 类型 输入 检查      更新时间:2023-10-16

我有一个模板类,它可以接受各种类型:int, double等。我想检查用户是否输入了正确的类型。如果对象是用int类型实例化的,那么用户应该输入int类型,如果对象是用double类型实例化的,那么用户应该输入double类型,以此类推。我希望无论输入来自文件还是键盘都能做到这一点。我有两个问题。

  1. 我应该在">>"操作符重载的定义检查?
  2. 我怎么核对?我要创建一个模板函数来检查任何类型吗?

我想要这样的东西:

template <class Ttype>
class foo 
{
    Ttype a,b,c; 
    friend istream &operator>> <>( istream &input, foo<Ttype> &X );
    //methods
};
template <class Ttype> istream &operator>>( istream &input, foo<Ttype> &X )
{
    //check if X.a,X.b,X.c are of Ttype
    input>>X.a>>X.b>>X.c;
}
int main()
{
    foo<int> a;
    cin>>a;
    foo<double> b;
    cin>>b;
    return 0;
}

在阅读之前不能检查输入。我能想到的唯一方法是将输入读入字符串(对于文本文件或stdin总是有效),并尝试将其转换为您期望的类型。在转换时,您可以查找异常

似乎您想要的只是尝试从istream读取,如果读取失败则失败。在这种情况下,您可以在提取操作之后使用istream的隐式布尔相似性。

template <class T>
class Foo {
    T a,b,c;
    friend std::istream& operator>>(std::istream& input, Foo& X ) {
      if (!(input >> X.a >> X.b >> X.c)) { // examine the istream
        std::cerr << "extraction failedn";
      }
      return input;
    }
}
相关文章: