2010-02-17 4 views
11

Je viens de commencer à travailler avec C++ après ne pas avoir travaillé avec lui pendant un certain temps. Bien que la plupart d'entre elles ait un sens, il y a quelques bits que je trouve un peu confuddling. Par exemple, quelqu'un pourrait-il s'il vous plaît expliquer ce que cette ligne ne:Quelqu'un peut-il expliquer ce typedef C++?

typedef bool (OptionManager::* OptionHandler)(const ABString& value); 
+2

Je suis curieux de savoir pourquoi quelqu'un a downvoté cela ... –

+0

C'est sans doute un doublon. Point est, nous avons autant de problèmes à trouver des questions identiques que vous avez fait. (pas mon downvote BTW) – MSalters

+3

Content de voir que je ne suis pas le seul à trouver la syntaxe du pointeur des fonctions gênante ... dans le meilleur des cas! –

Répondre

26

Il définit le type OptionHandler être un pointeur vers une fonction membre de la classe OptionManager, et où cette fonction de membre prend un paramètre de type const ABString& et retourne bool.

4

ceci est un pointeur vers une fonction membre de OptionManager qui prend un const ABString refrence et retourne un bool

2

Il est un typedef pour un pointeur vers la fonction de membre. Veuillez vérifier C++ FAQ.

9
typedef bool (OptionManager::* OptionHandler)(const ABString& value); 

Commençons par:

OptionManager::* OptionHandler 

Cela dit que ::* OptionHandler est une fonction membre de la classe OptionManager. Le * devant OptionHandler indique que c'est un pointeur; ce moyen OptionHandler est un pointeur vers une fonction membre d'une classe OptionManager.

(const ABString& value) indique que la fonction membre prendra une valeur de type ABString dans une référence const.

bool indique que la fonction membre renvoie un type booléen.

typedef indique qu'en utilisant "* OptionHandler" vous pouvez créer de nombreux pointeurs de fonction qui peuvent stocker cette adresse de cette fonction. Par exemple:

OptionHandler fp[3]; 

fp[0], fp[1], fp[2] mémorise les adresses des fonctions dont correspondance sémantique avec l'explication ci-dessus.

+2

Nice que vous cassez le type en petits morceaux, mais "' :: * OptionHandler' est une fonction membre ": pourquoi pas un membre ordinaire? Ceci est seulement détecté en regardant les environs. – xtofl