公子乖@C++
2010年12月5日 星期日
# (stringizing) and ##(merging) operator
2010年9月30日 星期四
Command DP 實作選單 by Boost Lambda
=====================
// copy from << beyond c++ >>
// use map to invoke command
// this add concrete command to map: command_map
}
Command DP 實作選單 by Boost Lambda
=====================
// copy from << beyond c++ >>
// use map to invoke command
// this add concrete command to map: command_map
}
2010年8月5日 星期四
Codeblocks Setup with GCC 4.5.0
1. 下載 TDM's GCC 4.5.0
- 第一次安裝時選擇 Create
- 若是 32 bit 電腦,選擇 MinGW/TDM (32-bit)
- 選擇安裝路徑,建議不要用預設的。我安裝在 c:\dev\MinGW32 目錄下。
- 選擇下載點 (我選的是台灣中央大學 應該吧...XD)
- 選擇安裝元件,一般預設值就可以了。若要編譯 ada 、 objc 等,就要在 gcc 選項勾選相關的元件。
- 安裝完後,會有 README 文件,可以看一看。裡面有此版本要注意的事項說明。
- 選擇 codeblocks-10.05-setup.exe 版本 (mingw 在第一步驟中已經裝了,codeblocks 包含的 mingw 是 GCC 3.4.5 版)
- 選擇元件 (全選就對了 XD)
- 設定安裝目錄,我設在 c:\dev\CodeBlocks
- 若安裝了 TDM's GCC 4.5.0,codeblocks 會自動偵測 (否則就要手動設定 toolchain 有點麻煩)
- 接下來開始使用 Codeblocks 啦 (簡稱 CB),首先開啟一個 Console Application
- 為專案配置目錄
- 把這段 code 貼上 (測試 C++0x 的 Lambda expression 功能)
|
- 按下 Build,這時候會有 error ,不過錯誤訊息會提醒你要勾選 Compiler 選項 -std=c++0x
- 那就照著做吧!! Setting -> Compiler and Debugger
- 接下來在 Build 就可以成功了。
Scott Meyers 這篇 blog 介紹了 GCC 4.5 的更新特色,可以參考
http://scottmeyers.blogspot.com/2010/07/updated-c0x-feature-availability.html
Enjoy It ~ \( ̄︶ ̄)>
2010年7月28日 星期三
NetBeans 使用 Boost
2010年7月6日 星期二
Effective C++ 條款心得
Table of Contents:
1. Accustoming Yourself to C++.
Item 1: View C++ as a federation of languages.
Item 2: Prefer consts, enums, and inlines to #defines.
Item 3: Use const whenever possible.
Item 4: Make sure that objects are initialized before they're used.
2. Constructors, Destructors, and Assignment Operators.
Item 5: Know what functions C++ silently writes and calls.
Item 6: Explicitly disallow the use of compiler-generated functions you do not want.
Item 7: Declare destructors virtual in polymorphic base classes.
Item 8: Prevent exceptions from leaving destructors.
Item 9: Never call virtual functions during construction or destruction.
Item 10: Have assignment operators return a reference to this.
Item 11: Handle assignment to self in operator=.
Item 12: Copy all parts of an object.
3. Resource Management.
Item 13: Use objects to manage resources.
Item 14: Think carefully about copying behavior in resource-managing classes.
Item 15: Provide access to raw resources in resource-managing classes.
Item 16: Use the same form in corresponding uses of new and delete.
Item 17: Store newed objects in smart pointers in standalone statements.
4. Designs and Declarations.
Item 18: Make interfaces easy to use correctly and hard to use incorrectly.
Item 19: Treat class design as type design.
Item 20: Prefer pass-by-reference-to-const to pass-by-value.
Item 21: Don't try to return a reference when you must return an object.
Item 22: Declare data members private.
Item 23: Prefer non-member non-friend functions to member functions.
Item 24: Declare non-member functions when type conversions should apply to all parameters.
Item 25: Consider support for a non-throwing swap.
5. Implementations.
Item 26: Postpone variable definitions as long as possible.
Item 27: Minimize casting.
Item 28: Avoid returning "handles" to object internals.
Item 29: Strive for exception-safe code.
Item 30: Understand the ins and outs of inlining.
Item 31: Minimize compilation dependencies between files.
6. Inheritance and Object-Oriented Design.
Item 32: Make sure public inheritance models "is-a."
Item 33: Avoid hiding inherited names.
Item 34: Differentiate between inheritance of interface and inheritance of implementation.
Item 35: Consider alternatives to virtual functions.
Item 36: Never redefine an inherited non-virtual function.
Item 37: Never redefine a function's inherited default parameter value.
Item 38: Model "has-a" or "is-implemented-in-terms-of" through composition.
Item 39: Use private inheritance judiciously.
Item 40: Use multiple inheritance judiciously.
7. Templates and Generic Programming.
Item 41: Understand implicit interfaces and compile-time polymorphism.
Item 42: Understand the two meanings of typename.
Item 43: Know how to access names in templatized base classes.
Item 44: Factor parameter-independent code out of templates.
Item 45: Use member function templates to accept "all compatible types."
Item 46: Define non-member functions inside templates when type conversions are desired.
Item 47: Use traits classes for information about types.
Item 48: Be aware of template metaprogramming.
8. Customizing new and delete.
Item 49: Understand the behavior of the new-handler.
Item 50: Understand when it makes sense to replace new and delete.
Item 51: Adhere to convention when writing new and delete.
Item 52: Write placement delete if you write placement new.
9. Miscellany.
Item 53: Pay attention to compiler warnings.
Item 54: Familiarize yourself with the standard library, including TR1.
Item 55: Familiarize yourself with Boost.
Appendix A: Beyond Effective C++.