异常w/QtConcurrent::Exception和boost::Exception
我想使用一个异常层次结构,其中基本异常类派生自boost::exception,这样我就可以获得该类必须提供的漂亮而有用的诊断信息,并使用QtConcurrent::exception,这样我就可以跨线程抛出异常 因此,我的基本异常类如下所示:异常w/QtConcurrent::Exception和boost::Exception,boost,exception-handling,qt4,Boost,Exception Handling,Qt4,我想使用一个异常层次结构,其中基本异常类派生自boost::exception,这样我就可以获得该类必须提供的漂亮而有用的诊断信息,并使用QtConcurrent::exception,这样我就可以跨线程抛出异常 因此,我的基本异常类如下所示: class MyException : public QtConcurrent::Exception, public boost::exception { public: MyException() { }; virtual ~MyExc
class MyException : public QtConcurrent::Exception, public boost::exception
{
public:
MyException() { };
virtual ~MyException() throw() { }
// required by QtConcurrent::Exception to be implemented
virtual void raise() const { throw *this; }
virtual MyException* clone() const { return new MyException(*this); }
};
根据QtConcurrent::Exception的文档,必须在从QtConcurrent::Exception派生的任何类中实现raise和clone。因此,我的其余代码可能如下所示:
void foo()
{
BOOST_THROW_EXCEPTION(MyException());
}
int main(int argc, char *argv[])
{
QApplication app(argc, argv);
try
{
foo();
}
catch (const MyException& me)
{
std::cerr << boost::diagnostic_information(me);
}
return 0;
}
但是,使用BOOST_THROW_EXCEPTION宏会导致以下编译错误:
错误C2555:'boost::exception\u detail::clone\u impl::clone':
重写虚拟函数的返回类型不同,并且不是协变的
来自“MyException::clone”
我不完全确定这个错误告诉我的是我的错误,不是错误,我确定
如果我改为使用throw MyException;代码编译得很好。如上所述,我希望使用BOOST\u THROW\u异常,以便在异常中获得诊断信息
我知道,一个可能的解决方法可能是另一个仅从QtConcurrent::Exception派生的类,它有一个boost::Exception成员,本质上是一个用于实际错误的容器。但是如果可能的话,我想继续让MyException类从QtConcurrent::Exception和boost::Exception继承
有人能提供一些关于错误的见解吗?有什么方法可以实现我想要的吗