2016-10-26 1 views
0

J'essaie d'appeler une méthode initialisée par un pointeur vers une méthode d'une autre classe, j'ai suivi this: mais cela n'a pas fonctionné pour moi.Méthode de classe d'appel non-statique initialisée par pointeur

considérez ceci:

class y 
{ 
    public: 
     int GetValue(int z) 
     { 
      return 4 * z; 
     } 
}; 


class hooky 
{ 
    public:  
     int(hooky::*HookGetValue)(int); 
}; 


int(hooky::*HookGetValue)(int) = (int(hooky::*)(int))0x0; // memory address or &y::GetValue; 



int main() 
{ 
    hooky h; // instance 
    cout << h.*HookGetValue(4) << endl; // error 
    return 0; 
} 

l'erreur qui produit est:

[Erreur] doit utiliser. 'ou' - '' pour appeler la fonction pointeur vers membre dans 'HookGetValue (...)', par ex. '(... -> * HookGetValue) (...)'

+1

Je suppose que vous devez écrire '(h. * HookGetValue) (4)' à la place? –

+0

@AdrianShum merci beaucoup, mais pourquoi ça marche? S'il te plaît, tu peux me le dire? Je ne comprends pas si c'est pareil. – nikomaster

+1

vérifier ma mise à jour –

Répondre

1

La syntaxe correcte pour appeler un pointeur de fonction membre est

(h.*HookGetValue)(4) 

Mise à jour: la raison pour laquelle le code d'origine ne Le travail comme prévu est dû à la priorité de l'opérateur C++: l'invocation de fonction () est prioritaire par rapport au membre .*. Ce qui signifie que

h.*HookGetValue(4) 

seront voir comme

h.*(HookGetValue(4))