在QT中创建我自己的异常并在函数中抛出异常

Creating My Own Exception In QT and Throwing an Exception in a Function

本文关键字:抛出异常 函数 异常 我自己 QT 创建 自己的      更新时间:2023-10-16

我正在尝试在Qt中创建自己的异常类。这是我第一次这样做,我对如何将我的豁免放入 main 中调用的函数中感到困惑。

我目前拥有的:

myExcption.h

#ifndef MYEXCEPTION_H
#define MYEXCEPTION_H
#include <qtconcurrentexception.h>
#include <QDebug>
class MyException: public QtConcurrent::Exception
{
public:
    void raise() const {qDebug() << "nException: "; throw *this;}
};
#endif // MYEXCEPTION_H

现在我目前如何抛出豁免是这样的:

myFuction.h

void Commands(QString Command_in, MyException &wrongInput);

我的函数.cpp

void Command(QString Command_in, MyException &wrongInput)
{
    if(Command_in != "some string")
    {
        wrongInput.raise();
    }
}

主.cpp

String s = "some String";
MyException wrongString;
try
{
   Command(s, wrongString);
}
catch(MyException &wrongString)
{
   qDebut << "String invalid";
}

现在这有效,但我觉得我不应该将我的异常引用传递给每个函数。我有哪些选择?这是我觉得我应该能够做到的,但我不确定该怎么做。

我的函数.cpp

void Command(QString Command_in)
{
    if(Command_in != "some string")
    {
        throw myException;
    }
}

主.cpp

QString s = "some String";
try
{
   Command(s);
}
catch(MyException &wrongString)
{
   qDebut << "String invalid";
}

这可能吗?

你快到了。在 throw 语句中,通常会抛出异常类的临时对象。例如

void Command(QString Command_in)
{
    if(Command_in != "some string")
    {
        throw MyException{};
    }
}

从技术上讲,命名对象没有错,但它长了一行,而且可读性不高:

void Command(QString Command_in)
{
    if(Command_in != "some string")
    {
        MyException someRandomName;
        throw someRandomName;
    }
}

当然,这意味着您也不需要raise()方法。但是如果你想要一个,它真的应该static

class MyException: public QtConcurrent::Exception
{
public:
    static void raise() const {qDebug() << "nException: "; throw MyException{};}
};