Хорошо, я думаю, что нашел ответ сам.Прежде всего, мне не нужно выводить мой класс из boost :: exception, я все еще могу продолжать наследовать от std :: exception.Однако я должен выбросить мой производный класс std :: exception используя BOOST_THROW_EXCEPTION.Таким образом, это становится boost :: исключением, поскольку это взлетает.: -)
В промежутке я могу добавить дополнительную информацию, если требуется, путем перехвата и перебрасывания.
typedef boost::error_info<struct tag_errmsg, std::string> exceptionInfo;
catch (boost::exception &e)
{
e << exceptionInfo("some more exception data");
throw;
}
И тогда я наконец могу поймать и напечатать это следующим образом:
catch (boost::exception &e)
{
std::exception const * se = dynamic_cast<std::exception const *>(&e);
if(se)
{
// will enter here only for my application exception and not for pure boost exception
std::cout << "STD: " << se->what();
}
std::cout << " BOOST: " << *boost::get_error_info<exceptionInfo>(e); }
}
Таким образом, я получу как строку what () из std :: exception, так и сообщение об ошибке из boost :: exception.Я на правильном пути?