检查输入类型是否正确
Check if input is of correct type
我有一个模板类,它可以接受各种类型:int, double等。我想检查用户是否输入了正确的类型。如果对象是用int类型实例化的,那么用户应该输入int类型,如果对象是用double类型实例化的,那么用户应该输入double类型,以此类推。我希望无论输入来自文件还是键盘都能做到这一点。我有两个问题。
- 我应该在">>"操作符重载的定义检查?
- 我怎么核对?我要创建一个模板函数来检查任何类型吗?
我想要这样的东西:
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;
}
}
相关文章:
- 是否可以初始化不可复制类型的成员变量(或基类)
- 是否可以从int转换为enum类类型
- 检查 std::shared_ptr<> 的当前底层类型是否为 T
- 函数作为模板参数,是否对返回类型强制约束
- JS相等运算符(如===)是否可以使用embind类型
- visual是否可以在c++中创建一个接收无限数量相同类型(或至少相当数量)参数的函数
- 检查函数返回类型是否与STL容器类型值相同
- 在类型和包装器之间reinterpret_cast是否安全<Type>?
- 检查某些类型是否是模板类 std::optional 的实例化
- 是否有内置方法可以强制转换为不同的基础类型,但保留常量限定符?
- C++类型特征,以查看是否可以<uint32_t>对类型"K"的任何变量调用"static_cast(k)"
- boost 是否有按特殊类型值编码状态"compact optional"?
- 初始值设定项列表是否只接受使用相同类型的值初始化变量?
- 是否有任何建议来统一函数类型限定符并简化可恶的函数类型?
- 表达式 SFINAE:如何根据类型是否包含具有一个或多个参数的函数来选择模板版本
- 检查一个类型是否直接派生自"enable if"上下文中的另一个类型(是其子类型)
- 在运行时检查继承是否只有一种类型和 void*
- 给定一个C++嵌套的私有结构类型,是否有从文件范围静态函数访问它的策略
- 将类型声明为类型模板参数的模板参数的一部分是否合法?
- 当返回类型声明为 ListNode 时,我们是否可以返回 false<T>*