2012-05-19 79 views
0

我需要一個用於不同函數的開關來規避頻繁的if方向。它應該類似於下面的代碼,封裝在一個類:類內的函數指針

#include<iostream> 
#include<stdlib.h> 

using namespace std; 

template<class T> 
class MaxSwitch 
{ 
public: 
typedef T (MaxSwitch::*Max_P)(T,T); 
Max_P fooC_P; 

MaxSwitch(int Q) { 
    if (Q==0)fooC_P=&MaxSwitch::MaxVal1; 
    else fooC_P=&MaxSwitch::MaxVal2; 
} 

inline T MaxVal1(T kx,T MAX) 
{ 
    return kx+1; 
} 

inline T MaxVal2(T kx,T MAX) 
{ 
    return MAX; 
} 

}; 

int main(int argc, char ** argv) 
{ 
int Q=atoi (argv[1]); 
MaxSwitch<int> MAXSW(Q); 


int MAX=5; 

for (int kx=0;kx<MAX;kx++) for (int ky=0;ky<(MAXSW.fooC_P)(kx,MAX);ky++) 
    { 
     cout<<"(kx="<<kx<<", ky="<<ky<<endl; 
    } 

return 0; 
} 

我現在有很重要的問題,該函數調用(MAXSW.fooC_P)(KY,MAX)是錯誤的。如何正確地做到這一點?

+0

快速說明:對於參數的命名約定使得代碼不是可讀.. –

+0

(周杰倫d正在與「不是可讀」好 - 我會說完全令人困惑。) – Mat

+0

歡迎您編輯它! –

回答

6

MAXSW.fooC_P是您需要調用的指向成員函數的指針,而MAXSW是您要調用它的對象。所以,你可以調用與功能:

(MAXSW.*(MAXSW.fooC_P))(ky,MAX); 
+0

請注意'(MAXSW。* MAXSW.fooC_P)(ky,MAX)'也可以工作(即 - 內部括號是冗餘的)。 – Mankarse