在QT中创建我自己的异常并在函数中抛出异常
Creating My Own Exception In QT and Throwing an Exception in a Function
我正在尝试在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{};}
};
相关文章:
- 从构造函数抛出异常时如何克服内存泄漏
- 函数如何通知用户它基于函数原型抛出异常?
- 在缺少函数重载时抛出异常,并带有 std::variant 而不是编译时错误
- std::vector 默认构造函数可以抛出异常吗?
- std:任何抛出异常解析函数类型
- 从成员构造函数(Brace Initializer vs Initializer列表)抛出异常
- 跨dll边界向构造函数抛出异常
- 在QT中创建我自己的异常并在函数中抛出异常
- 是否可以对构造函数抛出异常的对象进行异常处理,该对象的异常处理接近其基于堆栈的代码创建
- 奇怪的格式用于从构造函数中抛出异常
- std::map at 函数总是抛出异常
- 为什么当我在使用空 throw() 说明符指定的函数中抛出异常时没有调用 std::unexpected()
- 如果构造函数抛出异常,如何删除对象
- 如果文件在构造函数中不存在,则抛出异常,并在 main() 中创建对象时尝试/捕获它,如果好 - 开始使用该对象
- 从几个函数调用中抛出异常的方法,一直返回到main
- std::regex构造函数抛出异常
- 抛出异常并返回函数的结果
- 正在从vtable的析构函数安全抛出异常
- 抛出异常时未调用析构函数
- 我仍然可以在catch块内调用的函数中重新抛出异常吗?