→ 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
→ adrianshum:根本和寫十個 compare_by_Xxx() compare_by_Yyy() 無異 10/05 16:53
→ adrianshum:另, functor 的功能要改, 這個根本不成立吧. 到頭來 10/05 16:55
→ adrianshum:省到的就是我說的那兩句, 換來的是 model 被污染, code 10/05 16:55
→ adrianshum:變得難理解. 值得嗎? 還不要說要是要compare兩個field 10/05 16:56
→ adrianshum:的話, 這做法也行不通 10/05 16:56