【发布时间】:2014-07-13 16:36:31
【问题描述】:
我有一个队列,如果输入的数据与队列中的数据类型不同,我需要验证输入数据类型并处理异常,我该怎么做? 主.cpp
try {
cout << "Insert character: ";
cin >> ch;
prova.push(ch);
}
catch (wrong_insert& k) {
k.allert();
};
这是推送功能:
template <class t>
void queue<t>::push(const t& entry)
{
if(*I need this condition*) throw wrong_insert();
if(empty())
{
head_insert(front_ptr, entry);
rear_ptr = front_ptr;
}
else
{
insert(rear_ptr, entry);
rear_ptr = rear_ptr->link();
}
++count;
cout << "Inserted!" << endl;
}
这是异常类:
class wrong_insert
{
public:
wrong_insert() : message("Wrong data inserted!"){};
void allert(){ cout << message;};
private:
string message;
};
【问题讨论】:
-
输入验证不应等于异常,您应该在解析 IMO 时进行验证。
-
@RickyMutschlechner 不,它没有。 RTTI(即获取变量的类型信息)与检查用户输入的语义无关。
-
C++ 是静态强类型的。传递不同类型的对象的唯一方法(没有疯狂的强制转换,在这种情况下你无能为力)将传递一个派生类型。由于您按值存储对象(我假设),因此您将通过切片创建正确类型的新对象。所以检查似乎非常是多余的。
-
您的用例也毫无意义,因为在类型提升期间 char 将被隐式转换为 int,因此您的函数只会看到 int。