近年常被問到如何學習 C++

2005 年的時候曾經在 BBS 的全國轉信板 Programming 板上分享過 C++ 書籍的閱讀歷程,不過隨著時間流逝,那篇文章已經消失,但當年恰巧截了圖下來:

C++ 書籍閱讀歷程

或許有些老人曾經看過這東西,但隨著 C++11 的問世、侯捷淡出了繁體中文譯者圈、Scott Meyers 淡出 C++ 出版界,這些書大部分都已經過時且中譯版幾乎全部絕版,上面這張圖在 2022 年的今天也不再適用了。但我就是在這樣的學習環境裡長大的,所以我也無法在 2022 年提供一套新的 C++ 學習方式,畢竟當年的兩本磚頭聖經本 C++ 程式語言 (The C++ Programming Language) 以及 C++ Primer 即便換成了當今最新版本 The C++ Programming Language 4/e (中譯本) 及 C++ Primer 5/e (中譯本),也已經是接近過時的狀態,硬啃完這兩本對 C++ 的基礎知識也已經不完備了。坦白說,在 2011 年之後我也不知道該如何教一個新手如何學習 C++。所以很不好意思,我也幫不上忙,這只是一篇廢文。不過當年既然發了文,道義上我也得在這裡做一些說明。

Read more近年常被問到如何學習 C++

Boost.Serialization

在設計 editor、game 或是實現軟體系統中的 heuristic algorithm 等情況下,常需要設計 save/load 或 undo 之類的還原功能。學過 design pattern 的人大都知道 memento 和 command 這兩個 pattern。通常比較簡單的東西靠 command pattern 就能順便做出 undo 功能了,但是在其它比較複雜的狀況下就需要靠 memento pattern 來幫忙,將物件的狀態儲存起來以便隨時復原。有些語言如 Java 提供了將物件本身序列化 (serialize) 的機制,所謂序列化就是把物件狀態變成一串資料儲存起來。這樣就可以做到和 memento 相同的功能,更進一步的話還能將序列化後的資料存在 disk 上或透過網路傳遞。C++ 語言本身沒有支援 serialization 的功能,所以 boost 以 library support 的形式做了一個類似的。內建的支援有 binary、text 和 xml 三種輸出格式。這篇只會出現 text,反正用法都沒差 (唯一要注意的就是 binary 並非 portable)。

Read moreBoost.Serialization

Boost.MultiIndex

很久沒發程式文了。
最近常到處在網路上亂逛,
發現 boost 在台灣真的是沒什麼人在用。
應該說 C++ 普及的程度實在太低了,
看來還是放一點東西比較好...
不過用 1280x1024 解析度 + IE7 來讀這篇大概 code 右半邊會無法顯示,
懶得玩複製貼上的話就乖乖切到 1920x1200 或用 firefox 吧 (字會小一點但是很難看);
不然就等我有空去改改 css。

Read moreBoost.MultiIndex