在覈心結構以外,google-glog還經過宏技巧提供統一簡潔的使用接口。
同時,經過命名空間的使用盡量的減小名字衝突,提供一個簡介的日誌庫。編程
宏助手
- 經過宏提供一個統一的簡潔的日誌輸出接口
- 簡單的使用如LOG(INFO),LOG(ERROR)等日誌輸出接口
- 經過宏提供豐富的日誌輸出擴展功能
編程技巧
- 命名空間的使用
- 由於是做爲庫使用,因此glog中使用了命名空間類避免名字衝突
- 經過google命名空間提供glog庫的接口空間,內部實現則進一步封裝到嵌套命名空間中
- 宏技巧:分流
- 經過DEBUG宏可將日誌輸出定位到LogMessage中仍是什麼也不輸出的NullStream中
- 宏技巧:隱藏
- 日誌輸出核心是經過LogMessage等類實現,同時經過宏提供了豐富的接口如條件日誌,CHECK日誌等
- 宏技巧:清潔
- 在使用宏過程當中,會在使用完成後進行#undef操做來保證庫的宏不會干擾到使用庫的程序
- 宏技巧:斷言
- 在mutex.h中,經過定義#define MutexLock(x) ...來保證同步鎖不會出現MutexLock *lock=new MutexLock(&mu)之類錯誤
- 宏技巧:技巧
- 1.在#if條件中使用# error,there is ... 直接輸出錯誤消息的宏可在編譯期間就給出錯誤提示
- 2.在宏定義中使用do{...}while(0)來保證宏內容做爲一個總體,避免出現宏展開時的問題:
- 如#define call() a();b(),在調用if(1<0) call()時擴展成if(1<0) a(); b()後b()老是會被調用
小結
以上只是我參考了網上資料及閱讀源代碼時的總結,還沒在實際項目中應用。
經過閱讀源代碼,也是一種享受。google