如何验证数据类型输入



我有一个队列,我需要验证输入数据类型并处理异常,以防数据输入与队列中的数据类型不相同,我该如何做到这一点?MAIN.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;
};

我想添加这条评论,但由于我还没有50个声誉,所以不允许我这样做。

我认为如果类型是错误的,它将无法编译。

如果我理解对了你的问题,你是在问你如何检查没有人试图将一个整数插入到你的char s队列中。

答案是你不能,也不需要在运行时这样做。由于c++是一种强类型语言,您将无法编译数据类型不兼容的代码。将char类型转换为int类型是完全允许的,并且不会产生错误,但是将int类型作为char类型传递可能会根据具体情况触发错误/警告。

但是,请注意,在某些情况下,如果(a)通过强制类型转换特别要求它,或者(b)如果编译器可以知道整型的值足够小以适合char类型,则允许将整型传递给char类型。这发生在编译时。(NB根据你的c++版本,这种自动转换可能会给你一个警告或一个错误,所以要注意你的警告。)

如果你打算在相互继承的类中使用这个队列,你的问题就变得更相关了,因为你被允许传递一个派生类型的对象作为基类类型的引用或指针。在这里,您可以使用typeid操作符,但要知道这会触发RTTI(运行时类型标识),并用一些额外的代码使可执行文件变得混乱。

c++是关于"只有当你使用它时才为它付费",如果你需要它(并且性能不会受到太大影响),就使用它。

最新更新