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);
myFunction.cpp
void Command(QString Command_in, MyException &wrongInput)
{
if(Command_in != "some string")
{
wrongInput.raise();
}
}
的main.cpp
String s = "some String";
MyException wrongString;
try
{
Command(s, wrongString);
}
catch(MyException &wrongString)
{
qDebut << "String invalid";
}
现在这个工作,但我觉得我不应该在我的例外每一个引用传递功能。我有什么选择?这是我觉得我应该能够做到的,但我不知道该怎么做。
myFunction.cpp
void Command(QString Command_in)
{
if(Command_in != "some string")
{
throw myException;
}
}
的main.cpp
QString s = "some String";
try
{
Command(s);
}
catch(MyException &wrongString)
{
qDebut << "String invalid";
}
A
回答
2
你快到了。在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{};}
};