精華區beta Programming 關於我們 聯絡資訊
※ 引述《march20 ()》之銘言: : RTTI 不支援是 C++ 的錯, 不是 wx 的錯 :P : 如果 C++ 像 java 一樣有個 root class (i.e java.lang.Object), RTTI 會簡單很多. : 沒有這種 construct, RTTI 只能靠 macro 變出來, 會髒到不行. (MFC 就這樣搞的) RTTI 怎麼有辦法用 macro 變出來? macro 單純是文字取代,不可能獲得執行期資訊 : 不然就得改 C++ 語法, 這麼一來很多 C++ compiler 就不支援 wx 了. : (用 "root class" 怪怪的, 有什麼 term 可以用嗎? 很久沒碰 Programming Language 了) : generic type (在 C++ 來說就是 template 啦) 有其方便性, : 但一般來說, 有了 RTTI 和 root class 後, template 就可以拿掉了, 我個人覺得,所有的 template 功能都可藉由動態多形來完成 只是需要花費的力氣,執行期的效率等,都會有很大的差別 也就是說,雖然可以達到同樣的目的,也不代表其中一個可以取代另一個 : 就算有, 也只是 syntax sugar, 這就是 java 沒有 template 但卻沒什麼人抗議的原因. : (well, 不過 "建議" 要有 generic type 的人 應該是不少, : Java 1.5 已經把 generic type 加到 java 的語法裡了. : 雖然沒有沒關係, 但有了大家都很高興, 這就叫 syntax "sugar" :P) oh, 在 Java 1.5 的 generic type 確實跟 syntax sugar 差不多, 不過在 C++ 中的 template 絕對不僅於此,真的要講的話, 可能會變成 super syntax sugar 吧…? 就好像應該什麼東西都可藉由組合語言完成,但是誰會想用組合語言 完成所有的工作…?工作量可能會膨脹無限大吧…? : 在沒有 RTTI 和 root class 時, template 就像是 syntax level 的 macro, : 如果你反對大量的 macro, 那大概也不怎麼喜歡 C++ 的 template 吧. 說真的,這兩者差別真的太大了,在此就不贅言… 不過我個人覺得 template 對於 metaprogramming 的支援有點太弱了 同時很可惜的是 C++0x 對此似乎不會有太多的改變 雖然還沒仔細看過,不過 Ruby 對於 metaprogramming 的支援似乎很強 希望哪一天 C++ 能支援到那種程度 btw, 雖然 template 某方面而言是拿來取代 macro 的, 不過有些地方 template 確實是做不到,還是需要用到 macro 可以參考 Loki 的 Vistor 這也是為什麼我會說 template 對 metaprogramming 支援不足的原因之一 -- Hear me exalted spirits. Hear me, be you gods or devils, ye who hold dominion here: I am a wizard without a home. I am a wonderer seeking refuge. Sacrifice -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 220.135.28.18