我創造了我的圖書館日誌工具,並取得了一些不錯的宏,例如:使用C++宏來檢查變量是否存在
#define DEBUG myDebuggingClass(__FILE__, __FUNCTION__, __LINE__)
#define WARING myWarningClass(__FILE__, __FUNCTION__, __LINE__)
其中myDebuggingClass和myWarningClass都有一個重載< <運營商,以及用日誌消息做一些有用的事情。
現在,我有一個用戶將被超載稱爲「微件」的一些基礎類的,我想這些定義改變爲更多的東西一樣:
#define DEBUG myDebuggingClass(__FILE__, __FUNCTION__, __LINE__, this)
#define WARNING myWarningClass(__FILE__, __FUNCTION__, __LINE__, this)
這樣,當用戶撥打「DEBUG < < 「有些消息」; '我可以檢查「this」參數是否dynamic_casts到一個Widget,如果可以的話,我可以用這些信息做一些有用的事情,如果沒有的話,我可以忽略它。唯一的問題是我希望用戶能夠從非成員函數(例如main())發出DEBUG和WARNING消息。但是,由於這個簡單的宏,用戶只會得到一個編譯錯誤,因爲「this」不會在類成員函數之外定義。
最簡單的解決方案是隻定義單獨的WIDGET_DEBUG,WIDGET_WARNING,PLAIN_DEBUG和PLAIN_WARNING宏,並向用戶記錄差異,但如果有辦法解決這個問題,那將非常酷。有沒有人看到做這種事情的任何伎倆?
這應該起作用。 – 2010-07-06 22:09:52
我應該注意到這個答案在很多方面都是邪惡的。它使用了我不喜歡的宏,我覺得令人討厭的可變陰影和受保護的數據成員,我通常會避免(儘管我不反對)。這個解決方案是對你所問的問題最快最直接的回答,但這並不意味着它就是你的問題的答案。 – 2010-07-06 22:11:13
我喜歡@ MSalters的解決方案比這個更好。 – 2012-10-31 22:27:28