Re: [語法] STL sort 在一個 Class 裡面含很多priv …

看板C_and_CPP (C/C++)作者 (水無月真夜)時間16年前 (2009/10/05 17:11), 編輯推噓0(000)
留言0則, 0人參與, 最新討論串3/6 (看更多)
: ※ 發信站: 批踢踢實業坊(ptt.cc) : ◆ From: 114.32.15.163 : → adrianshum:我覺得這樣只不過是把那你口中那十個 functor的 code 10/05 12:04 : → adrianshum:用另一種形式寫出來吧了, 沒省多少東西... 10/05 12:05 : → minazukimaya:十個functor變一個functor總比寫十遍好吧.. 10/05 12:39 : → minazukimaya:確實,如果你十個都有用到 compiler真的會具現化 10/05 12:39 : → minazukimaya:十個functor出來 但是寫一個總比寫十個簡單.. 10/05 12:40 : → minazukimaya:template的精義就在於叫compiler幫你寫code啊XDD 10/05 12:41 : → adrianshum:重點是沒有省多少 code 呀... 所謂重覆的部份也只是 10/05 16:10 : → adrianshum:class XXX { public boolean operator < (const Y&){}} 10/05 16:11 : → minazukimaya:好處多多啊 1.十行變一行 2.避免duplicate code產生 10/05 16:27 : → minazukimaya:3.如果你宣告十個functor compile就會生十個給你 10/05 16:28 : → minazukimaya:但是template是你真的有用到才會產生 10/05 16:28 : 推 Fenikso:template配什麼enum.. 要放也是放member function pointer 10/05 16:30 : → minazukimaya:如果你真的寫十個functor出來 以後要是functor功能 10/05 16:31 : → minazukimaya:要改 一口氣要改十個地方耶XD 10/05 16:31 : 推 Fenikso:你這樣跟寫十個不同名字的getter有什麼不同 10/05 16:36 : → minazukimaya:是他們教授說要用template完成耶XD 啊不然我也知道 10/05 16:37 : → minazukimaya:用boost::bind一個functor都不用寫 10/05 16:38 : → minazukimaya:另外,和前述一樣的道理 你寫十個getter就是十個都 10/05 16:41 : → minazukimaya:會存在 但是template member function是需要的時侯 10/05 16:41 : → minazukimaya:才會產生出來的 10/05 16:41 : 推 Fenikso:comparator寫成template就好啦 getter寫成template一點用 10/05 16:42 : → Fenikso:都沒有 10/05 16:42 : → minazukimaya:好處是function call成本比較低啊 當然缺點就是靈活 10/05 16:50 : → minazukimaya:度比較差 10/05 16:50 : → adrianshum:最大問題是把本來的class 污染了, 用 external functor 10/05 16:52 : → adrianshum:其中一個原因就是想改 sorting criteria 的時候不需改 10/05 16:52 : → adrianshum:model, 但這做法, 每加一個就要改一次 model 10/05 16:53 加上getXXX()的做法也是每加一次要改一次model啊.. 同樣都是汙染原本的class 為什麼你為認為加十個getter比加一個template function汙染得少呢? 要提取class其中的private成員 本來就勢必要在class裡面加東西 兩者的差別只在你加的是member function還是template member function而已 : → adrianshum:根本和寫十個 compare_by_Xxx() compare_by_Yyy() 無異 10/05 16:53 class LessThanByXXX { public: bool operator() (GNF& lhs,GNF& rhs) { return lhs.getXXX()<rhs.getXXX();} }; 這樣寫十個 和 template <GNF::SortBy T> class LessThanBy { public: bool operator() (GNF& lhs,GNF& rhs) { return lhs.getAttr<T>() < rhs.getAttr<T> ();} } 寫十個前者到底哪裡比較好.. 除了增加code的長度和降低維護性之外.. 寫十個functor然後每個functor只差9個字元 這樣真的比較好嗎 : → adrianshum:另, functor 的功能要改, 這個根本不成立吧. 到頭來 10/05 16:5 : → adrianshum:省到的就是我說的那兩句, 換來的是 model 被污染, code 10/05 16:5 : → adrianshum:變得難理解. 值得嗎? 還不要說要是要compare兩個field 10/05 16:5 : → adrianshum:的話, 這做法也行不通 10/05 16:5 template <GNF::SortyBy T, GNF::SortyBy T> 不就好了嗎.. 如果你嫌麻煩不想寫還可以加個預設引數呢 這種需求不寫成template 難道要寫10*9 = 90個LessThanByXXX_AND_YYY()嗎... -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 114.32.15.163 ※ 編輯: minazukimaya 來自: 114.32.15.163 (10/05 17:31)
文章代碼(AID): #1AoRWsqn (C_and_CPP)
討論串 (同標題文章)
文章代碼(AID): #1AoRWsqn (C_and_CPP)