C++函数指针
问题描述:
这可能吗?如果是这样,我似乎无法得到正确的语法。 (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