在C++ 11及更高版本中,可以使用current_exception()
檢索到當前異常的exception_ptr
。是否有可能在運行時確定所指向的異常的類型?如何在運行時確定exception_ptr指向的異常類型?
更確切地說,如何獲得exception_ptr
所指異常的type_info
的引用?我知道根據類型catch
是可能的,但程序員需要爲所有可能的異常類型編寫catch
塊,但這不是解決此問題的方案。
try {
userProvidedRuntimePlugin.executeAction(); // May throw anything
} catch (...) {
auto e = std::current_exception();
std::type_info & info = /* ??? */;
std::cerr << "Exception of type " << info.name() << " thrown." << std::endl;
}
沒有,類型信息不能直接從異常指針中獲得。但是,真正的用例是什麼?你總是可以重新投擲和捕捉。 –
@KerrekSB我只能通過類型捕獲,如果我知道異常的類型或異常的基類的類型,並非總是如此。很抱歉,由於法律原因,我無法分享有關真實用例的更多信息。 – jotik
「真實」並不意味着「你在做什麼」。它可以很好地指代包含與您的真實項目相同的*設計元素的人工構建場景。你甚至不必指出這個元素是什麼。 「真實」僅僅意味着你不應該給我們一條線,而是說它不會做你想做的事。在C++中有許多你不能做的特殊事情,但這本身並不有趣。問題是,是否有什麼你可能真的想要因爲它而無法完成。 –