我想使用基异常类派生自的异常层次结构,boost::exception
以便我可以获得该类必须提供的良好且有用的诊断信息,以便 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); }
};
PerQtConcurrent::Exception
的文档,raise()
并且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;
}
但是,使用BOOST_THROW_EXCEPTION()
宏会导致以下编译错误:
错误 C2555:“boost::exception_detail::clone_impl::clone”:覆盖虚函数返回类型不同,并且与“MyException::clone”不协变
我不完全确定这个错误告诉我什么(我敢肯定,我的错,不是错误!)。
如果我改为使用throw MyException();
代码编译就好了。正如我上面提到的,我想使用BOOST_THROW_EXCEPTION()
以便在我的异常中获取诊断信息。
我知道一个可能的解决方法可能是另一个派生自QtConcurrent::Exception
具有 boost::exception 成员的类,本质上是实际错误的容器。但如果可能的话,我想继续让这个MyException
类继承自QtConcurrent::Exception
boost::exception 和 boost::exception。
有人可以提供一些关于错误在说什么的见解吗?有什么办法可以完成我想要的吗?