我想繞過異常和更多我猜想他們可以做什麼,甚至更重要他們應該做什麼,不應該做什麼。也許我誤解了C++異常?
因此,我將以一個例子說明我是如何思考一個非常具體的問題,並希望人們會祝福或抨擊我所擁有的想法。
我正在讀取一個xml文件的設置,所以我可能有設置,但也有一些情況下,具體的設置可能不在那裏,這會產生一些麻煩和大量的「錯誤處理「或稱之爲類型: (注意:這不是」真正的代碼「,而只是一些僞造的東西,希望能夠說明我的觀點)。
if (xml.attribute("some_attrib")) {
settingForSomeAttrib = xml.attribute("some_attrib")->value();
} else {
settingForSomeAttrib = "some default value";
}
因此,這將留下我一檢查,讓每個人都能分配或多或少和任何我想要做的,這是不可取的。
然後我在想,也許我可以完成所有的工作,取出任何出錯的東西,並將其傳遞給默認值,稍微嘗試一下就可以解決問題,後處理..
帶領我到try/catch
類型的思維。
我想,然後也許我可以做一個try塊:
try {
setting1 = xml.attribute("attr1")->value(); // throws some kind of "attr1" exception?
setting2 = xml.attribute("attr2")->value(); // -||- "attr2" exception?
} catch (???) {
//go through the things which went wrong and set them settings straight!
}
希望這是某種感覺,或者至少,它可能按照我的思路。我覺得這不是真的如何使用例外。
我在想,我的問題是怎麼樣兩本摺疊:
1)可用這樣的例外或這僅僅是一個壞主意? 2)人們通常如何通過C++來獲取這些代碼,以便在檢查有效性時獲得不是所有的代碼?
謝謝。
我肯定不會使用異常來處理僅僅是可選的設置。 – NPE
在你的'try/catch'例子中,如果'settings1'行產生一個異常,那麼由於這個異常,下面的所有行都不會被執行。所以你只需在每個屬性get的周圍放一個'try/catch',這與你上面的'if/else'相同。我會做的是首先初始化所有東西,然後通過嘗試從XML中拉出來運行,如果值不存在,則無關緊要。編輯:我也喜歡下面的@NPE例子。 – themanatuf
一般情況下,使用意外情況(或者,我敢說,例外情況)出現異常。您應該期望可選屬性丟失,所以這不是一個特殊情況。 –