Quelle est cette technique C ++ pour ajouter des types à une classe appelée?

StackOverflow https://stackoverflow.com/questions/1643197

  •  10-07-2019
  •  | 
  •  

Question

Je viens de trouver du code C ++ (à l'adresse http://msdn.microsoft.com/en-us/library/k8336763(VS.71).aspx ), qui utilise une technique que je n'ai jamais vue auparavant pour ajouter des types à une classe existante:

class Testpm {
public:
   void m_func1() { cout << "m_func1\n"; }
   int m_num;
};

// Define derived types pmfn and pmd.
// These types are pointers to members m_func1() and m_num, respectively.
void (Testpm::*pmfn)() = &Testpm::m_func1;
int Testpm::*pmd = &Testpm::m_num;

int main() {
   Testpm ATestpm;
   Testpm *pTestpm = new Testpm;

   // Access the member function
   (ATestpm.*pmfn)();
   (pTestpm->*pmfn)();   // Parentheses required since * binds

   // Access the member data
   ATestpm.*pmd = 1;
   pTestpm->*pmd = 2;

   cout  << ATestpm.*pmd << endl
         << pTestpm->*pmd << endl;
}

Quelqu'un peut-il me dire comment cette technique de définition des types dérivés est appelée ou m'indiquer de la documentation à ce sujet? Je n'ai jamais découvert cela en 13 ans d'utilisation de C ++ et j'aimerais mettre fin à mon ignorance.

Était-ce utile?

La solution

Le commentaire est incorrect: pmfn et pmd ne sont pas des "types dérivés". du tout (ce ne sont même pas des types!). Ce sont des pointeurs vers les membres .

Autres conseils

Je ne pense pas qu'ils "ajoutent des types" à la classe. Ils semblent simplement définir des types de pointeurs sur les fonctions membres et les données membres de la classe, puis les utiliser pour accéder à la fonction membre et au membre data. Semblable à la façon dont vous déclareriez des types à des fonctions non membres, mais en tant que membres de la classe, la syntaxe est différente.

À partir de ce site ici

  

En ce qui concerne leur syntaxe, il y a deux   différents types de pointeurs de fonction:   D'une part, il y a des pointeurs vers   fonctions C ordinaires ou en C ++ statique   fonctions membres. D'autre part   il y a des pointeurs sur le C ++ non statique   fonctions membres. La différence fondamentale   est-ce que tous les pointeurs non statiques   les fonctions membres ont besoin d'un caché   argument: le this-pointeur vers un   instance de la classe. Toujours rester dans   esprit: ces deux types de fonction   les pointeurs sont incompatibles entre eux   autre.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top