這可能嗎?如果是這樣,我似乎無法得到正確的語法。 (C++函數指針)C++函數指針
位的背景。下面的代碼縮短了這篇文章。這種實現的原因是爲了避免無數的SWITCH/CASE或IF/ELSEIF語句;並有一個DECODER_FUNCTION_TABLE的無盡列表(見下文)。此代碼涉及使用助記符表示不同事物的行業標準,並且有數百種這些助記符。因此,我的代碼的這一部分是解碼某些助記符從另一部分代碼傳遞給它,它通過傳入記錄進行循環......無論如何,我的難處在於將成員函數指針保存在類之外的結構中...
看一看。我認爲該代碼可以做一個更好的工作,解釋;)
typedef struct _DECODER_FUNCTION_RECS
{
ISO_MNEMONIC_ID Mnemonic;
void (Database::*pFn)(Database::Rec *);
}DECODER_FUNCTION_RECS;
DECODER_FUNCTION_RECS DECODER_FUNCTION_TABLE[] = {
SFP, &Database::Decode_SFP,
KOG, &Database::Decode_KOG
};
void Database::DecodedDescription(Rec *A)
{
int i = 0;
bool Found = false;
while(i < DECODER_FUNCTION_TABLE_COUNT && !Found)
{
if(DECODER_FUNCTION_TABLE[i].Mnemonic == A->Mnemonic)
Found = true;
else
i++;
}
if(Found)
(([DECODER_FUNCTION_TABLE[i]).*this.*pFn)(A);
}
void Database::Decode_SFP(Rec *A)
{
// do decode stuff on A
}
我試圖制定出細節是這一行:
(([DECODER_FUNCTION_TABLE[i]).*this.*pFn)(A);
退房這個答案:http://stackoverflow.com/questions/1915880/boostbind-boostfunction-pointers-to-overloaded-or-templated-member-function/1917145#1917145 – Paul 2011-04-21 11:57:16