Maxiee的Vim入門日記(6)——用Vim看aMule代碼2

昨天在 Maxiee的Vim入門日記(5)——用Vim看aMule代碼 裏,Maxiee分析了wxSingleInstanceChecker這個類型,從中感受到了Vim強大的功能,看代碼效率確實提高很多!今天Maxiee繼續分析amule.h文件,因爲裏面的宏定義安排的很巧妙,值得學習。
 
打開amule.h,往下翻一點,就會遇到一塊宏定義:
 

 
這個塊的邏輯是,如果定義了AMULE_DEAMON,就讓AMULE_APP_BASE代表wxAppConsole;如果沒有定義呢,就讓AMULE_APP_BASE代表wxApp。同時,一個似乎叫核心定時器週期宏也代表這不同的值。
 
這個AMULE_DEAMON到底是什麼呢?DEAMON這個詞,Maxiee在鳥哥的私房菜裏看到過,叫守護進程,就是在後臺運行的。
 
昨天就已經查到過,aMule採用一套代碼,可以編譯出功能不同的多個軟件:
  • amule(伺服器/用戶端)- aMule 的桌面程式
  • amuled(伺服器)- 後臺程序,可配合 amulecmd 或 amulegui 使用
  • amulegui(用戶端)- 在圖形介面下使用
其中這個amuled,不就是amule deamon嘛!所以說,要編譯後臺運行的deamon,我們就採用這個定義就好。
 
照這麼說,amule和amulegui也會有相應的宏了?Maxiee趕緊在Vim裏往下翻:
 

 
立刻又碰到了這麼一塊宏:通過宏定義的不同,IsDeamon和IsRemoteGui這兩個函數的內容也會不同!宏定義真是個巧妙啊。Maixee仔細分析看:
開頭有註釋“Who am I”,我是誰?是說要編譯的是哪種程序。
IsDeamon():我是不是Deamon呢?
如果定義了AMULE_DEAMON,那我就回答說是
否則,我就說我不是Deamon
IsRemoteGui():同理
如果定義了CLIENT_GUI,那我就是純GUI程序
否則,我就不是
有了Deamon,有了Remote GUI,那麼amule呢?最關鍵的怎麼沒了?
兩個都不是,那不就是amule嘛!
……
 
amule最基本的類是CamuleAppCommon,不管是Deamon、Gui還是amule,都要繼承它,這三個程序因爲功能不同,還各自實現了各自的類,用了C++的多重繼承,最終,這三個類是這樣的:
 

 
(這個位於amule-remote-gui.h中)

 

 
Maixee發現,這三者都有DECLARE_APP(XXXX),在wxWidget中,這是一個宏,大概是指定程序運行時執行的類。下面還有一個指針,不論我們編譯的是哪種類型,theApp都代表當前的程序。
 
通過宏定義,amule就能用一套程序,編出三個執行程序來,很巧妙,Maxiee今天又學了一招哈O(∩_∩)O~~
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章