精華區beta Programming 關於我們 聯絡資訊
※ 引述《march20.bbs@ptt.cc》之銘言: > ok, 我這樣說確實不夠嚴謹, > 我不清楚製訂 C++ 的人是基於什麼理由被設計出 template 的, > 以下言論純粹是個人的使用經驗, 歡迎指教 :) 其實當初 template 被放進 C++ 的原因極其單純, 不過就是「讓程式碼看起來更簡潔」。 上一篇回給你的部分其實不是將 template 放到 C++ 裡的人想到的, 而是後人挖掘出來的附加價值, 如果不清楚我說什麼歡迎再討論, 不過我 7/31 要搬家, 所以可能沒辦法馬上回或回得很詳細。 > 就 "製造 code 模版" 這件事來說, template 確實是種 macro, 但硬要說 "template > 可以被 macro 取代" 是有問題的. 我想說的其實很簡單: > 很多 macro 造成的問題, 在 template 都看得到, 因為就實質作用來說, > 這兩種有很高的成份是相同的. 成分相似不代表能互相取代, 就像 OO design patterns 裡也會出現 class diagram 相似, 但是作用完全不同的例子, 需要拿 UML 裡其它的 diagram 一起看才會知道其差別, 也是這樣的道理。 C++ 的爸爸的確是很想讓 const 跟 template 取代掉 macro, 但實務上證明了這是不可行的, 事實上 template 主要可取代的只有 function-like macro, 因為有充分的正當性, 光是能用 ## 這種東西的理由也難以辯駁。 > 對於 C++ 的 template, 我認為這是該 "小心使用" 的一種語言構造, 嚴謹地使用 > 可以帶來相當大的便利, 如 STL. 但誤用帶來的麻煩也遠較其它語法更為嚴重, > STL 又是一個很好的例子 :P 前陣子無聊看到 C# 的 code, 有注意到 C# 有對 template parameter 加上一層保護, 忘記了它的 syntax, 不過它能夠限制具備哪些特性的 class 才可以被丟進來; 這個功能在 C++ 恐怕不會被採用, 因為 C++ 目前標榜的還是什麼東西都盡可能在 compile-time 做完。 至於 template parameter 的誤用問題, C++ 社群最常見的說法是就算誤用, 也能在 compile-time 就檢查出來, 只是現在 compiler 吐出來的 error message 都很爛, 所以常常讓新手看不懂而直接放棄或四處亂 try。 我個人並不會不支持這樣的說法, 畢竟看懂 error messages 本來就是 programmer 的責任, 而且雖然那些 error messages 可以把螢幕洗爆, 仔細耐心去看個一兩次其實還是能發現要怎樣去抓到重點, 那些 messages 其實 C++ Primer 這本書都有看懂的話其實都沒問題, 更何況摸熟 C++ Primer 這本書的內容只是 C++ programmer 的最基本要求。 -- Name: Tseng, Ling-hua E-mail Address: uranus@it.muds.net School: National Tsing Hua University Department: Computer Science Interesting: C++, Compiler, PL/PD, OS, VM, Large-scale software design Researching: Undecided Homepage: https://it.muds.net/~uranus -- ╔═══╗ ┼────────────────────────╮ 狂狷 Origin:[ 狂 狷 年 少 ] whshs.cs.nccu.edu.tw ╰─╮ 年少 ┼╮ < IP:140.119.164.16 > ╰─╮ ╚╦═╦╝ From:218-171-139-90.dynamic.hinet.net ─╨─╨─ KGBBS 遨翔"BBS"的狂狷不馴;屬於年少的輕狂色彩