Search

2011年5月16日 星期一

stringizing and merging operator

既然說要紀錄了,那就順便把以前學MFC時兩組關聯執行時期型別鑑定(RTTI)的巨集,DECLARE_DYNAMIC、IMPLEMENT_DYNAMIC中看到的#和##運算子的使用說明一下,至於上面兩組巨集的實現可參考「深入淺出MFC」或是「Windows程式設計」(王豔平編著)有簡潔的說明。

#(stringizing)是"字串化"運算子,只能用在帶有參數的巨集,可以直接看範例比較快。

範例:


#include ‹cstdio›

#define str(x) printf(#x)

int main(int argc,char**argv)
{
    str(stringizing\n);

    return 0;
}





##(merging)是"合併"運算子,一樣直接看範例比較快。


範例:



#include ‹cstdio›

#define mer(s,n) printf(#s,val##n)
const int val1 = 7;

int main(int argc,char**argv)
{
    mer(%d\n,1);

    return 0;
}

8 則留言:

  1. 《多型與虛擬》對 stringizing 跟 merging 這兩個 operators 有比較清楚的解釋。BTW, 書上的 MFCLite 現在在網路上還找得到: http://jjhou.boolan.com/efile-mfclite.htm

    回覆刪除
  2. 沒想到coopermaa大大也知道這本<(_ _)>,侯捷大師是我最喜歡的電腦書作者了!

    這本多型與虛擬還有另一本深入探索C++物件模型以及COM本質論都是絕版書,我去年剛上大學才在圖書館找到看完之後整個通體舒暢:)XD

    回覆刪除
  3. 哇塞!這幾本書藝術成份有三四層樓那麼高耶,你居然都看完了!!
    佩服!《C++物件模型》跟《COM本質論》這兩本我翻了一兩章就束諸高閣了,應該已經積了一層灰了吧。

    回覆刪除
  4. 看完跟理解是兩回事啊XD

    不過coopermaa大大有這兩本書看來也是十年以上的前輩囉XDDDDDDDD

    回覆刪除
  5. 我 66 年次的,大學唸資管,這幾本書好像是大四買的,唸資管卻挑戰這麼硬的題目,實在是不自量力,果然我也的確看不懂。如果有緣的話,以後再挑戰吧,哈~

    回覆刪除
  6. 天啊coopermaa大大竟然跟我老爸差不多年次...失敬失敬...果然是前前前輩<(_ _)>

    回覆刪除
  7. 我也不過 30 出頭,還是 "年輕人" 啊.
    該驚訝的是我,你老爸實在是太威了。XD

    回覆刪除
  8. 昨天腦內曆法錯亂誤以為是1966...XD

    回覆刪除