2010-12-07 25 views

Répondre

6

Cela signifie que Callback est un nouveau nom pour le type: pointeur vers une fonction renvoyant un int et en prenant deux paramètres de type « const pointeur annuler » et « int ».

Etant donnée une fonction f:

int f(void * const param, int s) 
{ 
    /* ... */ 
} 

Le Callback peut être utilisé pour stocker un pointeur vers f:

Callback c = &f; 

La fonction f peut être plus tard invoqué par le pointeur sans se référer directement à son Nom:

int result = c(NULL, 0); 

Au moment de l'appel, le nom f n'apparaît pas.

+0

et comment puis-je mettre en œuvre cette fonction? – gln

+1

@gln: c'est un pointeur sur la fonction, cela signifie généralement le point d'une fonction existante qui correspond à la signature – icecrime

+0

Que voulez-vous dire? –

2

Il crée un nouvel "alias" ou nom par lequel vous pouvez vous référer à des pointeurs vers des fonctions qui renvoient int et prennent deux paramètres: un void* const et un int. Vous pouvez ensuite créer des variables de ce type, leur assigner, appeler la fonction à travers eux etc comme dans:

int fn(void * const param,int s) { ... } 

Callback p; 
p = fn; 
int x = p(NULL, 38); 

Notez que typedef s ne créent pas vraiment de nouveaux types ... tout typedef équivalent est résolu à la seule type réel pour l'application de la résolution de surcharge, modèle instanciation etc ..

+0

J'aime le terme alias ici. Je souhaite que typedef ait été appelé typealias (avec typedef créant de nouveaux types). –

+0

@Martin: ce serait vraiment bien - j'ai dû créer 'template classe Wrapper {...};' et modifier manuellement 'N' assez souvent pour simuler de nouveaux 'T'. En arrondissant cela, les fonctions à mapper d'un "nouveau type" au type sous-jacent réel, permettent au programmeur de spécifier s'il doit y avoir des instanciations de gabarits séparées ou partagées, et si les types doivent être équivalents pour les paramètres d'appel de fonction correspondants. mais c'est un peu plus complexe! –

2

Il déclare un type de fonction:

// Set up Callback as a type that represents a function pointer 
typedef int (*Callback)(void * const param,int s); 

// A function that matches the Callback type 
int myFunction(void* const param,int s) 
{ 
    // STUFF 
    return 1; 
} 

int main() 
{ 
    // declare a variable and assign to it. 
    Callback funcPtr = &myFunction; 
}