Est-ce possible? Si oui, je n'arrive pas à avoir la syntaxe correcte. (Pointeur de fonction C++)C++ Fonction Pointer
peu d'arrière-plan. Le code ci-dessous a été raccourci pour ce post. La raison de cette implémentation est d'éviter une liste infinie d'instructions SWITCH/CASE ou IF/ELSEIF; et avez une liste infinie de DECODER_FUNCTION_TABLE (voir ci-dessous). Ce code traite d'un standard de l'industrie qui utilise des mnémoniques pour signifier différentes choses et il y a des centaines de ces mnémoniques. Donc cette partie de mon code est de décoder certains mnémoniques qui lui passent d'une autre section de code qui boucle dans un enregistrement passé ... de toute façon ma difficulté est de garder un pointeur de fonction membre dans une structure en dehors de la classe ...
Jetez un oeil. Je pense que le code peut faire un meilleur travail expliquant;)
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
}
Le détail que je suis en train de travailler est cette ligne:
(([DECODER_FUNCTION_TABLE[i]).*this.*pFn)(A);
directe Découvrez cette réponse : http://stackoverflow.com/questions/1915880/boostbind-boostfunction-pointers-to-overloaded-or-type-member-function/1917145#1917145 – Paul