Eri*_*ric 1 c++ pointers function
这可能吗?如果是这样,我似乎无法正确使用语法.(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
}
Run Code Online (Sandbox Code Playgroud)
我正在尝试解决的细节是这一行:
(([DECODER_FUNCTION_TABLE[i]).*this.*pFn)( A );
Run Code Online (Sandbox Code Playgroud)
你调用一个成员函数指针(就是它所谓的)
(this->*DECODER_FUNCTION_TABLE[i].pFn)(A);
Run Code Online (Sandbox Code Playgroud)
可以放置parens DECODER_FUNCTION_TABLE[i].pFn,但成员访问运算符.的优先级高于成员函数运算符->*.