【发布时间】:2011-04-21 11:53:17
【问题描述】:
这可能吗?如果是这样,我似乎无法正确使用语法。 (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 );
【问题讨论】: