Posted on 2010-11-02 16:33
點點滴滴 閱讀(919)
評論(0) 編輯 收藏 引用 所屬分類:
02 編程語言
定義一個類,類中有幾個函數(shù)成員完成相似的功能,根據(jù)調(diào)用者選的模式對相應(yīng)的函數(shù)進(jìn)行調(diào)用 在Funtion()函數(shù)下如果按下面的代碼調(diào)用的話,由于這個Funtion()頻繁調(diào)用(成千上萬次).如果每次都進(jìn)行判斷性能會降低很多.所以準(zhǔn)備用類成員函數(shù)代替下面的段代碼.
switch(iFlag)
{
case 1:
Fun1();
break;
case 2:
Fun2();
break;
case 3:
Fun3();
break;
}
在類中定義
typedef void (BaseClass::*FUN)();
然后聲明函數(shù)成員
FUN m_fun;
在構(gòu)造函數(shù)中根據(jù)相應(yīng)的模式進(jìn)行指針賦值
switch(iFlag)
{
case 1:
m_fun=Fun1;
break;
case 2:
m_fun=Fun2;
break;
case 3:
m_fun=Fun3;
break;
}
在調(diào)用出直接用類成員函數(shù)指針調(diào)用.卻報了error C2064: term does not evaluate to a function這個錯誤
Funtion()
{
m_fun();
}
呵呵..其實原因很簡單..成員函數(shù)指針和類成員函數(shù)指針的區(qū)別就是累成員函數(shù)會有一個this指針需要 加上這個指針上述代碼改為下面的形式..ok.編譯成功.....
Funtion()
{
(this->*m_fun)();
}