http://blog.csdn.net/pongba/category/39865.aspx
經典以後的經典
——寫在C++圖書出版史上又一部經典著做問世以前
劉未鵬(pongba) /文
C++圖書界沉寂久矣!
至少我是這麼認爲的。國內引進第一批C++經典書籍的時候我是親歷的。感受真是「忽如一晚上春風來,千樹萬樹梨花開」。別誤會,我說的這個第一批並不是 《C++ Programming Language》《C++ Primer》這種經典中的經典。而是說諸如《Exceptional C++》《More Exceptional C++》《Effective&More Effective C++》《C++ Gotchas》《Generic Programming and the STL》《The C++ Standard Library》《C++ Templates》《Morden C++ Design》等。其中《Modern C++ Design》是最爲激動人心的著做。學泛型而不讀該著做就好像學算法不讀D.E的《The Art of Compute Programming vol.1.2.3》同樣,沒法達到更高的境界。我只記得當時拿到這本書從早晨9點一直看到晚上22點,兩頓飯都沒有吃,如癡如醉。正由於這本書太經典, 也太前衛了,因此我看完內心就暗暗的下了個結論「C++圖書界將好久不會出現這樣激動人心的著做了」。果真,後來出的一些如《Accelerate C++》《Applied C++》《C++ Network Programming vol.1.2》等,雖然也堪入經典之列,可是畢竟沒有使人十分振奮的內容了。
然而,C++泛型技術的發展卻一刻也沒有中止過,boost庫的不斷更新將C++泛型技術逐漸推進到了一個新的高峯,原先在《Modern C++ Design》中的有些前衛有些學院派的技術到了boost庫中終於和實踐緊密結合到了一塊兒,泛型的抽象本質發揮了其驚人的力量,因而boost庫裏出現 了一個又一個具備高度可複用性和定製性的泛型構件。泛型經過boost庫終於漸漸貼近了程序員的生活。
若是說C++泛型是那隻壓在五行山下的孫猴子,那麼《Modern C++ Design》就揭開了山上的封印,釋放了這猴頭驚人的力量,而boost庫則是孫悟空頭上的那道金箍,約束並引導着它向正確的方向走,作正確的事。雖然 有這道金箍,但它的力量卻一點也沒有削弱,甚至更強,只不過在被磨掉棱角的同時日趨成熟了而已。
然而,遺憾的是,雖然boost庫中隨處可見精緻的泛型應用,能夠說是一本源碼教科書,正如Linux源代碼之與程序員,可是「沒有三兩三,別想過樑山 」,並不是每一個人都可以讀懂其源代碼,甚至一個對泛型頗爲了解的程序員也會在其中迷途難返。這是由於boost庫爲了在大部分主流編譯器上都能經過編譯,作 了不少的workaround,而且,爲了節省代碼量,boost庫中隨處可見大片大片的宏,這些宏就像迷宮,源代碼的迷宮。這兩個緣由都使得boost 的源代碼可讀性較差。
所以,boost庫雖然貼近了程序員,boost庫的源代碼卻愈發遠離了程序員。
可是,在C++泛型領域已經登堂入室,欲更進一步,一窺堂奧者卻非得閱讀像boost這樣經典的源代碼不可。「熟讀唐詩三百首,不會吟詩也會吟」。
雖然boost庫的源代碼的可讀性較差,但也並不是極差,若是有人事先爲你透徹講解boost庫中的泛型運用和設計理念,相信你必定會在閱讀時遊刃有餘。
這就是了——一本即將出版的經典之做,由boost的發起者之一,C++標準委員會的成員David Abraham以及另外一位boost成員Aleksey Gurtovoy合著的——《C++ Template Metaprogramming:Concepts,Tools,and Techniques from Boost and Beyond》。
對於這麼一本勢必成爲經典的書,我實在惶於評價,仍是引用其主頁上面的一段話吧:
這本講述C++模板元編程的書將賦予C++用戶空前的強大能力,並使這門技術成爲程序員手中真正實用的一門技術。
This book covers C++ Template Metaprogramming in a way that provides unprecedented capability to the C++ power-user, and delivers practical metaprogramming into the hands of the everyday programmer.
一直以來,C++泛型彷佛總處於一種奇怪的位置,有人說它太學院派,有人認爲那太遙遠,如今還用不到它,有人認爲那是庫的設計者的事情,與程序員關係不 大。更有人持「不敢高攀」的態度。其實這些都是錯誤的態度,泛型是一門由來已久的思想,其核心理念是抽象,並無什麼神祕之處。與面向對象提供的二進制復 用相比,泛型的代碼提供了源碼級的複用,一個具備更強的動態特性,一個具備更強的類型安全性和效率,二者互補才能發揮最大的力量。已經出版的不少關於 C++泛型的經典書籍其實已經很好的介紹了這一點。只不過,關於C++泛型,還有一門能夠獨立出來的技術——模板元編程。而這偏偏是令泛型構件更具表達力 和自由度的技術。甚至也能夠說是boost庫的基石之一(除了部分對泛型依賴不強的組件如Regex等例外)。因此,顯而易見這是一門很是重要的技術,這 一點從《Generative Programming》一書中也可看出。
然而,對於這門能夠獨立出來的技術,目前咱們所看到的只是一些零星的描述,《C++ Templates》裏面雖有一整章描述metaprogram,但對於渴求知識者仍如隔靴搔癢,不能盡興。不過,這種狀況就快過去了,《C++ Template Metaprogramming》將會系統的講述C++模板元編程技術,將這門原先只是大師們手中的利器的神祕技術帶到普通程序員的手中,賦予普通程序員 驚人的力量。
若是說《Modern C++ Design》是C++泛型書籍上的經典之做(它的確是),那麼這本即將道來的《C++ Template Metaprogramming》將是經典以後的又一次經典!
做者開放了該書的第三章和附錄A。雖然只有兩章,可是精彩紛呈,絕對值得一讀。下面是個人翻譯,一是出於本身的興趣,二是方便讀者。
第三章 深度探索元函數
http://blog.csdn.net/pongba/archive/.../01/90642.aspx