Pouvez-vous expliquer ce que signifie la ligne suivante?C++ typedef declaration
typedef int (*Callback)(void * const param,int s)
Pouvez-vous expliquer ce que signifie la ligne suivante?C++ typedef declaration
typedef int (*Callback)(void * const param,int s)
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.
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 ..
J'aime le terme alias ici. Je souhaite que typedef ait été appelé typealias (avec typedef créant de nouveaux types). –
@Martin: ce serait vraiment bien - j'ai dû créer 'template
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;
}
et comment puis-je mettre en œuvre cette fonction? – gln
@gln: c'est un pointeur sur la fonction, cela signifie généralement le point d'une fonction existante qui correspond à la signature – icecrime
Que voulez-vous dire? –