除了what()
之外,我的異常類還應提供公共字段中的詳細信息嗎?除了什麼之外,C++異常還提供更多詳細信息()
例如,考慮boost::property_tree::ptree_bad_path
可能會給你一個消息:
"No such node (mynode.value1)"
訪問路徑("mynode.value1"
)的唯一方法是通過解析字符串。是否有反對增加額外的公共字段來攜帶這些信息的論據,即:
class ptree_bad_path : public ptree_error {
public:
const std::string path; // <- additional detail by public field
....
這種方法是否存在缺陷?
所以只是如何最好寫一個異常類的記錄,提示/鏈接,(一)存儲路徑在其中,還有(b)有一個nothrow副本?當然,它與'std :: exception'中的'what'消息是一樣的問題,但通常你不用擔心,因爲基類隱藏了它。 –
@SteveJessop我不確定我是否有足夠的知識以提供最佳實踐。我所知道的一切都需要醜陋的樣板,而且很少有必要。 – Pubby
@Steve:我不認爲這是在任何合理意義上的「最好的」,但你可以在運行時計算串用一個shared_ptr甚至達到無拋出複製目標。或者類似但更高效的DIY解決方案。然後構建第一個異常對象可能會失敗,但隨後的複製不會失敗,因爲該字符串只是共享的。 –