Re: [閒聊] 尋求比nest-if更優美的解決辦法
※ 引述《POSIX (tedium of chores)》之銘言:
: 因為有點想要了解exception
: 對於這樣的狀況
: 要怎麼設計這個catch 和DataInvalidError exception 呢?
: 如果說每個function ( checkData, modifyData, fireDataChanged, saveDataIntoFile)
: 如果throw 出來的都是DataInvalidError 這個type
: 那勢必catch 還是要用一連串的if
: 去判斷e 這個傳近來的exception 的內容是哪一個function throw出來的
: (或是用switch 的語法)
: 或是說DataInvalidError 這邊是用繼承的技巧(這邊我就不太熟了)
: 讓catch 能夠分辨出來 是哪個type 而得知是哪個function丟出來的
: 是這樣嗎?
這就要靠正確的分類錯誤型別去做到比較好的分派
比方說你可以針對 DataInvalidError 再做更深的繼承去細分錯誤內容
諸如
class DataFormatError : public DataInvalidError;
class DataSavingError : public DataInvalidError;
等
如果你知道如何針對細節去處理,就可以 catch 這些子類別
如果對 client code 而言,失敗就是失敗,它要做統一處理
就是直接 catch DataInvalidError, 或是 std::exception
甚至是最極端的 catch( ... ) 去硬吞所有例外(通常使用在process/thread邊界)
: 感覺有點毛毛的、很詭異的感覺
: 是不是還有其他更美麗的作法?
: 感恩m(_._)m
我不知道這樣的作法美不美麗,但我的習慣是定義一個固定的體系:
// error.h
// 避免 template 造成隱式膨脹, 在這裡先定義必要函式
class BaseError : public std::exception;
// 利用 policy 的方式訂製基礎錯誤類別
template< typename ErrorType >
class Error : public BaseError, public ErrorType;
// client code
class GodDxmn;
typedef Error< GodDxmn > GodDxmnError;
client 可以針對自己的需要自由訂製一個自己的例外類別
--
自High筆記(半荒廢)
http://legnaleurc.blogspot.com/
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 123.205.248.119
推
01/05 23:22, , 1F
01/05 23:22, 1F
→
01/05 23:23, , 2F
01/05 23:23, 2F
→
01/05 23:24, , 3F
01/05 23:24, 3F
→
01/05 23:24, , 4F
01/05 23:24, 4F
→
01/05 23:26, , 5F
01/05 23:26, 5F
→
01/05 23:26, , 6F
01/05 23:26, 6F
→
01/05 23:47, , 7F
01/05 23:47, 7F
→
01/05 23:48, , 8F
01/05 23:48, 8F
→
01/05 23:48, , 9F
01/05 23:48, 9F
→
01/05 23:49, , 10F
01/05 23:49, 10F
→
01/06 00:04, , 11F
01/06 00:04, 11F
→
01/06 00:05, , 12F
01/06 00:05, 12F
→
01/06 00:06, , 13F
01/06 00:06, 13F
推
01/07 05:54, , 14F
01/07 05:54, 14F
討論串 (同標題文章)
本文引述了以下文章的的內容:
完整討論串 (本文為第 20 之 21 篇):