use*_*858 5 c++ qt exception-handling
我试图在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
Run Code Online (Sandbox Code Playgroud)
现在,我如何抛出豁免是这样的:
myFuction.h
void Commands(QString Command_in, MyException &wrongInput);
Run Code Online (Sandbox Code Playgroud)
myFunction.cpp
void Command(QString Command_in, MyException &wrongInput)
{
if(Command_in != "some string")
{
wrongInput.raise();
}
}
Run Code Online (Sandbox Code Playgroud)
main.cpp
String s = "some String";
MyException wrongString;
try
{
Command(s, wrongString);
}
catch(MyException &wrongString)
{
qDebut << "String invalid";
}
Run Code Online (Sandbox Code Playgroud)
现在可以正常工作了,但是我觉得不必将异常的引用传递给每个函数。我有什么选择?这是我应该可以做的,但是我不确定该怎么做。
myFunction.cpp
void Command(QString Command_in)
{
if(Command_in != "some string")
{
throw myException;
}
}
Run Code Online (Sandbox Code Playgroud)
main.cpp
QString s = "some String";
try
{
Command(s);
}
catch(MyException &wrongString)
{
qDebut << "String invalid";
}
Run Code Online (Sandbox Code Playgroud)
这可能吗?
你快到了。在throw语句中,通常会抛出异常类的临时对象。例如
void Command(QString Command_in)
{
if(Command_in != "some string")
{
throw MyException{};
}
}
Run Code Online (Sandbox Code Playgroud)
从技术上讲,命名对象没有任何问题,但它多了一行并且可读性不强:
void Command(QString Command_in)
{
if(Command_in != "some string")
{
MyException someRandomName;
throw someRandomName;
}
}
Run Code Online (Sandbox Code Playgroud)
当然,这意味着您也不需要raise()方法。但如果你想要一个,它确实应该是static:
class MyException: public QtConcurrent::Exception
{
public:
static void raise() const {qDebug() << "\nException: "; throw MyException{};}
};
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3659 次 |
| 最近记录: |