Re: [問題] 樣版設計 - 只接受特定幾種類別該怎設計?

看板C_and_CPP (C/C++)作者 (眠月)時間16年前 (2009/05/21 02:32), 編輯推噓0(003)
留言3則, 2人參與, 最新討論串3/3 (看更多)
以泛型設計的觀念來說, 如果你真的要擋住某些型別,我強烈建議你用黑名單, 因為白名單的作法會擋掉未來太多的可能性, 你沒辦法放 complex,沒辦法放 fractor,沒辦法放 BigNum, 你的使用者會想要放一堆他們自訂的,你連想都沒想過的 class 進去。 既然你設計這個泛型函數的這個當下沒想過那些 class, 當然你也不可能把他寫進白名單。 至於實作上要怎麼簡單的作一份會有 compile time error 的黑名單: 最好的作法是你在 function 內部用 Loki::TypeList 列出你的黑名單, 然後根據檢索的結果 SelectType 檢索出一個 compile time 整數, 如果要具現的類別在黑名單 type list 裡面,那這個整數要是 0, 你可以根據這個整數進行 static assertion 來作到 compile time error。 這個是最優雅而且是在語言規格內的解法,但是要會的東西比較多。 懂 type list 的話上面就很容易懂。 不懂的話 type list 的話, 那我建議你用 macro 或是 code generator 直接把要擋掉的 class 生出來, marco 是最簡單的解法 O_O 最後是說,以這個矩陣相加的 case 來講, 老實說我不覺得你應該去擋任何型別………這真的很奇怪……… 我不知道你在想什麼 -- To iterate is human, to recurse, divine. 遞迴只應天上有, 凡人該當用迴圈.   L. Peter Deutsch -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 118.160.105.106

05/21 09:53, , 1F
嗯~ 感謝~ 只是我當然不可能只做矩陣相加這樣的計算
05/21 09:53, 1F

05/21 09:55, , 2F
所以我才要考慮到型別的問題~
05/21 09:55, 2F

05/21 19:20, , 3F
你可以舉個需要考慮型別的例子我看嗎?
05/21 19:20, 3F
文章代碼(AID): #1A54p2xl (C_and_CPP)
文章代碼(AID): #1A54p2xl (C_and_CPP)