Указатель функции C ++ - PullRequest
       3

Указатель функции C ++

1 голос
/ 21 апреля 2011

Возможно ли это?Если так, я не могу понять синтаксис правильно.(Указатель на функцию 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 );

Ответы [ 2 ]

5 голосов
/ 21 апреля 2011

Вы вызываете указатель на функцию-член (так он называется) с

(this->*DECODER_FUNCTION_TABLE[i].pFn)(A);

Может ставить парены вокруг DECODER_FUNCTION_TABLE[i].pFn, но оператор доступа к члену . имеет более высокий приоритет, чем оператор функции-члена ->*.

2 голосов
/ 21 апреля 2011

Я написал несколько простых примеров, которые проливают свет на днях

Это в моем ответе на этот вопрос

ошибка C2664 и C2597 в OpenGL и DevIL в C ++

Или прямая ссылка на кодовую панель

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...