作者查詢 / minazukimaya
作者 minazukimaya 在 PTT [ C_and_CPP ] 看板的留言(推文), 共103則
限定看板:C_and_CPP
看板排序:
全部Stock5249home-sale253Gossiping163C_and_CPP103C_Chat95DigiCurrency95Option91creditcard79Military78Baseball60MH47Law-Service39HatePolitics33Tech_Job31PC_Shopping26Foreign_Inv24HOT_Game20MabinogiHero10nCoV20197iOS5facelift4ClashRoyale3Economics2Japan_Travel2Rockets2TaiwanDrama2WomenTalk2cosplay1H-GAME1<< 收起看板(29)
首頁
上一頁
1
下一頁
尾頁
3F推:糟糕看到這問題想笑的只有我嗎...這個也太......07/22 17:27
1F推:靜態多型也是多型啊..主要的問題在於有沒有動態綁定10/08 09:35
2F→:的需求吧..10/08 09:35
3F→:動態多型最重要的好處是可以用一個container就處理10/08 09:35
4F→:heterogeneous collection..10/08 09:35
5F推:C++ templates: the complete guide第14.3節有討論這10/08 09:40
6F→:兩者分別適用在哪些地方10/08 09:40
17F推:剛剛測了一下Windows XP VC 7.1 和10/06 13:11
18F→:linux 2.6.30 & g++ 4.3.4..10/06 13:11
19F→:這兩個都會把heap上allocate空間的meta放在slot前面10/06 13:11
20F→:size的資訊都是以byte為單位..10/06 13:12
21F→:前者的meta長達48個bytes..後者才16個bytes XD10/06 13:13
1F推:trait class嗎?10/05 19:36
1F推:你把兩件事混在一起講了10/05 18:04
2F→:getter function是不是template 和10/05 18:05
3F→:comparator functor是不是template是兩回事10/05 18:05
4F→:另外原本的class是沒有getter的 不管你用哪種方法10/05 18:06
5F→:加getter進去都是汙染..10/05 18:06
10F推:如果你說要額外加新的criteria,而這個criteria具有10/05 18:09
11F→:某種獨特性,那它就只會有一個 所以額外寫一個當然10/05 18:10
12F→:是不用template template幫你把十個functor壓縮成10/05 18:10
13F→:一個 但是沒說你所有的criteria都要寫進這個10/05 18:10
14F→:template裡10/05 18:10
19F推:你現在在說的是哪個?getter function是template10/05 18:22
20F→:還是compare functor是template?10/05 18:22
21F→:前者的話討論在上一篇的推文 後者的話我完全不能同10/05 18:22
22F→:意用十個functor取代一個template functor是好做法10/05 18:22
1F推:template function call 和function pointer call10/05 17:36
2F→:效率不一樣10/05 17:36
3F→:當然compiler optimization也許可以解決這個問題10/05 17:36
4F→:但是這兩者不過是「效率」和「彈性」的trade-off10/05 17:37
6F→:可是這個comparator是用來sort的耶= =10/05 17:38
7F→:用來sort表示它會不斷的被call,也就是它的效率10/05 17:38
8F→:絕對影響整個sort的效率 而且是正比..10/05 17:38
9F→:而且重點是 std和boost都有函式配接器幫你做這件事10/05 17:39
10F→:所以如果是要寫這種functor,根本不用親自動手10/05 17:39
12F推:透過pointer的函式呼叫本來就比較慢 這也是為什麼10/05 17:43
13F→:C的qsort會比std::sort慢的主要原因啊10/05 17:43
15F→:當然如果優秀的compiler是有可能把pointer call10/05 17:44
16F→:轉成一般呼叫的10/05 17:44
19F→:重點是你有沒有對某個函式進行取址的動作10/05 17:45
21F→:如果你要取址 inline就失效了 inline本身只是給10/05 17:45
23F→:compiler的「建議」10/05 17:45
24F→:compiler不一定真的幫你inline,特別是你會用到他的10/05 17:46
25F→:位址的時侯..10/05 17:46
27F→:不用 甚至有可能連函式呼叫都不用10/05 17:47
29F推:Inside the C++ Objective model有提到這個10/05 17:51
31F→:functor的operator()有可能用inline做掉啊 因為10/05 17:52
32F→:又沒有實際對它取址@@10/05 17:52
38F推:你下面那篇才說用template寫functor不合理耶10/05 17:59
39F→:Fenikso和我的code差別只在於getter function要不要10/05 18:00
40F→:寫成template而已10/05 18:00
41F→:TO:LPH66 對 但是你一旦對某個getter function取址10/05 18:01
42F→:compiler勢必要生個位址出來 這樣它就不能inline了10/05 18:01
43F→:所以boost::function才要做個wrapper包起來10/05 18:01
44F→:以確保你在這樣用的時侯不會造成效能上的衝擊10/05 18:02
47F→:包一層的話 帶過去實際的資訊是Type10/05 18:11
48F→:所以呼叫這個Type裡面的operator()的時侯 其實並10/05 18:12
49F→:沒有像傳function pointer進去一樣要經過一個取址10/05 18:12
50F→:這樣的話operator()就很可能被inline處理掉10/05 18:13
52F推:在getter被傳進去之前就包起來10/05 18:18
53F→:就可以避免對getter()取址10/05 18:19
56F推:等等 原本的class是沒有getter的 為什你會一直假10/05 18:25
57F→:設他有呢?10/05 18:25
58F→:如果原本的class有getter,那用std的函式配接器10/05 18:27
59F→:就可以解決sorting的問題 不需要另外再寫個functor10/05 18:27
60F→:std的functino adaptor事實上就是個template functor10/05 18:28
61F推:如果你需要更強大的功能 也有boost::bind10/05 18:31
62F→:和boost::function可以用10/05 18:31
63F推:TO LPH66: 剛剛我把你的問題再想了一遍 的確10/05 19:39
64F→:在compile time時template參數的位址是已知 所以10/05 19:40
65F→:好的compiler應該要把語法的indirect call 轉成10/05 19:40
66F→:direct call10/05 19:40
67F→:但是進一步來說能不能轉變成inline call,要由整個10/05 19:41
68F→:程式中究竟有沒有地方確實在run-time需要知道該10/05 19:42
69F→:function的位址來決定(ex.在runtime把該function取10/05 19:42
70F→:址,assign給某個變數之類)10/05 19:42
71F→:我想應該前幾大的compiler都會有這種優化能力(大概10/05 19:44
3F→:十個functor變一個functor總比寫十遍好吧..10/05 12:39
4F→:確實,如果你十個都有用到 compiler真的會具現化10/05 12:39
5F→:十個functor出來 但是寫一個總比寫十個簡單..10/05 12:40
6F→:template的精義就在於叫compiler幫你寫code啊XDD10/05 12:41
9F→:好處多多啊 1.十行變一行 2.避免duplicate code產生10/05 16:27
10F→:3.如果你宣告十個functor compile就會生十個給你10/05 16:28
11F→:但是template是你真的有用到才會產生10/05 16:28
13F→:如果你真的寫十個functor出來 以後要是functor功能10/05 16:31
14F→:要改 一口氣要改十個地方耶XD10/05 16:31
16F→:是他們教授說要用template完成耶XD 啊不然我也知道10/05 16:37
17F→:用boost::bind一個functor都不用寫10/05 16:38
18F→:另外,和前述一樣的道理 你寫十個getter就是十個都10/05 16:41
19F→:會存在 但是template member function是需要的時侯10/05 16:41
20F→:才會產生出來的10/05 16:41
23F→:好處是function call成本比較低啊 當然缺點就是靈活10/05 16:50
24F→:度比較差10/05 16:50
2F→:google查就有了..10/05 11:44
1F推:如果你有自己的.h檔 include在這兩個檔案之前10/02 02:02
2F→:請檢查你的.h檔 最後一個class的定義有沒有加分號10/02 02:02
3F→:#include這種preprocessor只是幫你作複製貼上文字10/02 02:03
4F→:所以compile error也有可能是出在你自己的.h檔裡10/02 02:04
2F→:樓上的..那些some statement是if判斷過了之後也會執10/02 15:03
3F→:行的喔@@ 你寫成這樣 後面那段是if判斷過了就不會執10/02 15:03
4F→:行的10/02 15:03
6F→:第一個等號錯了10/03 23:08
首頁
上一頁
1
下一頁
尾頁