检查输入是否正确

时间:2015-05-20 15:46:15

标签: c++ validation templates input

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

  1. 我应该检查">>"的定义?运算符重载?
  2. 我该如何检查?我是否创建了一个检查任何类型的模板函数?
  3. 我想要这样的事情:

    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;
    }
    

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:1)

您似乎只想尝试从istream读取并在读取失败时失败。在这种情况下,您可以在提取操作之后使用istream的隐式bool-like。

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 failed\n";
      }
      return input;
    }
}