带有QtConcurrent :: Exception和boost :: exception的异常

时间:2013-03-15 10:40:00

标签: boost exception-handling qt4

我想使用一个异常层次结构,其中基本异常类派生自boost::exception,以便我可以获得该类必须提供的好的和有用的诊断信息 {{1所以我可以跨线程抛出异常。

因此,我的基本异常类看起来像:

QtConcurrent::Exception

根据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::Exceptionraise()必须在从clone()派生的任何类中实现。因此,我的其余代码可能类似于:

QtConcurrent::Exception

但是,使用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; } 宏会导致以下编译错误:

  

错误C2555:'boost :: exception_detail :: clone_impl :: clone':   覆盖虚函数返回类型不同且不协变   来自'MyException :: clone'

我不完全确定这个错误告诉我的是什么(我的错,不是错误,我确定!)。

如果我改为使用BOOST_THROW_EXCEPTION()代码编译就好了。正如我上面提到的,我想使用throw MyException();以便在我的异常中获取诊断信息。

我知道一个可能的解决方法可能是另一个派生自BOOST_THROW_EXCEPTION()的类,它有一个boost :: exception成员,本质上是实际错误的容器。但是如果可能的话,我希望继续QtConcurrent::Exception继承MyException和boost :: exception。

有人可以提供一些有关错误说明内容的见解吗?有什么方法可以实现我想要的吗?

0 个答案:

没有答案