C++函数指针

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)

Xeo*_*Xeo 5

你调用一个成员函数指针(就是它所谓的)

(this->*DECODER_FUNCTION_TABLE[i].pFn)(A);
Run Code Online (Sandbox Code Playgroud)

可以放置parens DECODER_FUNCTION_TABLE[i].pFn,但成员访问运算符.的优先级高于成员函数运算符->*.