精華區beta Programming 關於我們 聯絡資訊
※ 引述《milochen.bbs@ptt.cc (邪樹豬鹿)》之銘言: > 之前也是有看這一類的書,也想說能夠從這些書中學一學怎樣寫出跟書上一樣有趣的 > template… > 不過等真的在寫的時候,發現理論與實際有天與地的差別,或者是說書上寫的 > 不見得自己的complier就能夠,有時候沒過,也不知道該從何查起 現代的 compiler 應該都不會這麼慘了, msvc 8.0 我是不清楚(請參考前面板友說的話), gcc 4.1, 4.2, 4.3 其實都能編過大部分的東西了, 另外就是請稍微注意一下自己的 compiler 有沒有 template 深度限制, 通常都會有參數可以調, gcc 是用 -ftemplate-depth-n, 不過要注意標準不接受超過 17 層以上的深度。 > 有時候會想說,是不是要寫template之前,要先搞懂每個complier對於template寫法的 > 接收度到底在那邊… 不過其實也不知道到底這方面資訊要去那裡找。 學的時候有乖乖練習的話其實都會發現, 另外就是真的不要用太舊的 compiler。 > 反而就變成一直在try and error… try到最後會發現,原本當初理想的template的規則 > 似乎已經變成說是自己在那邊try and error。而之後想要寫程式的時候,就拿那固定 > 幾種 曾經使用 成功過的方法, 來重覆使用。 我印象中沒有這麼嚴重, 可能單純只是程式碼撰寫錯誤, 耐心去看錯誤訊息也是一種學習的必經之路, 如果因為 compiler 吐了十幾頁 error 就被嚇到的話, 那就表示還必須再多磨練, 其實基礎夠穩的話那些也只不過是數量多而已。 不過許多 compiler 在 template 相關的 error messages 上不友善的輸出, 一直也是一個問題, 是有人寫了一些小工具可以把 error messages 導進去整理後重新輸出, 但是終究還是不怎麼好用。 > 但是對於 如何 利用 template 規則,來創造出 許多像Modern C++ Design 這本書 > 一樣的夢幻code。 真的是還有好大的一段距離, > 關於這點其實我一直不知道怎麼克服,總覺得看書去理解是一回事 沒有真正寫過中型規模系統的初學者, 絕對是不可能一讀完書就能憑空造出那樣的 code 來, 建議先用看過書之前的方式來撰寫, 然後再來一步一步的去改(建議使用 CVS 等版本控制系統), 最大的禁忌就是一心一意的想一步登天, 沒有人一開始就能搞出那麼漂亮的東西, 這也正是為什麼這種書會從基礎開始教起的原因, 它是為了讓你看過這樣的演進過程, 然後你自己也要真的把你自己的東西照著演進一次, 並將這個過程的心得與書上印證和比較, 而不是希望你看完以後就能馬上寫出那種 code。 > 但發現自己反而是花更多的時間,是拿著自己的template code去 > try and error 一個 跟本就不知道它會怎麼處置 template的黑盒子。 > 不知道有沒有大大也曾有類似這樣子的經驗的。 這個我可能沒辦法回答你, 除了直接看 error messages 外, 因為我本身有在接觸 gcc 的 source code, 所以就算真的碰到不能理解的狀況也能從 gcc 的 generic/gimple tree 去追, 我也很好奇使用非 open source 的 compiler 做這些事的人, 是怎麼樣去解決的。 但我並不會用 try & error 的方法去做, 而是先解讀錯誤訊息後再來看問題到底出在哪, 如果你說只是完全沒頭緒的 try & error, 那樣是很不好又浪費時間的行為。 > 通常像遇到這種情形的時候,我們要怎樣的規劃,才可以在學習template的路上 > 或得更有效率的學習,並且能夠實際應用在開發大型系統上。 我的方法是改寫過去寫過的東西, 我習慣每次看完一本書就會去強化我寫過的東西。 > Modern C++ Design 一書,慢慢看的話,其實真的是不難懂 > 但是實際Coding的時候 compile 能不能接受 這語法才是最頭痛的問題, > 常常會困在說「是compiler 剛好不支援這樣寫的方式,還是我寫的方式本來就不合法」 你可以貼上來大家去 try try 看, 但是根據我的經驗, 要是 compiler 沒有吐出平常沒看過的錯誤訊息, 那通常都是跟自己寫錯有關, 耐心看錯誤訊息就可解決。 另外就是前幾年開始就存在一個過渡期, 就是 C++ compiler 對 typename 的出現要求很嚴, 標準規定不該省略的地方就一定不要省略, 不然很容易就會死掉。 > 因為實際是找不到方法,所以....想在此請教曾經有克服這段經驗的大大.... > 我在猜我是不是學習的方法有什麼嚴重錯誤而不自知?? 學會看懂所有錯誤訊息是第一步吧, 我想這點應該沒什麼爭議, 另外就是不要先懷疑 compiler 沒支援。 > 希望 能夠 在 Modern C++ Design 讀書會下,透過大家一起討論的方式, > 理想是能夠抓住GoF的方法,把Modern C++ Design 的精隨舉一反三的方式 > 可以實際的把這精巧的元素 真的直接用於 系統的開發上。 > ........感恩..... -- 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: Software pipelining for VLIW architectures Homepage: https://it.muds.net/~uranus -- ╔═══╗ ┼────────────────────────╮ 狂狷 Origin:[ 狂 狷 年 少 ] whshs.cs.nccu.edu.tw ╰─╮ 年少 ┼╮ < IP:140.119.164.252 > ╰─╮ ╚╦═╦╝ From:61-230-223-213.dynamic.hinet.net ─╨─╨─ KGBBS 遨翔"BBS"的狂狷不馴;屬於年少的輕狂色彩