2010-03-26 3 views
1

J'ai le problème suivant:Writting un getter pour un pointeur vers une fonction

"list.c"

struct nmlist_element_s { 
    void *data; 
    struct nmlist_element_s *next; 
}; 

struct nmlist_s { 
    nmlist_element *head; 
    nmlist_element *tail; 
    unsigned int size; 
    void (*destructor)(void *data); 
    int (*match)(const void *e1, const void *e2); 
}; 

/*** Other code ***/ 

Quelle sera la signature d'une fonction qui retourne 'destructor 'de la structure? Par exemple, la signature de la fonction qui retourne « taille » est:

unsigned int nmlist_size(nmlist *list); 

Quel sera le cas pour « destructor ».

+0

Vous essayez d'écrire C++ dans C? Je ne t'envie pas. –

+0

@ T.E.D. En fait, c'est très rafraîchissant :) –

Répondre

3

Forme générale:

void (*get_destructor())(void *data); 

forme exacte dépendra de quels paramètres get_destructor est censé prendre. Si vous ne faites que renvoyer le pointeur destructeur d'une instance de struct nmlist_s, cela ressemblera à

void (*get_destructor(struct nmlist_s list))(void *data); 
+0

Merci, la syntaxe est un peu étrange, mais c'est ce que je cherchais. –

+2

@nomemory: La syntaxe est _inductive_. Il se lit comme suit: 'get_destructor' est tel que lorsqu'il est appliqué certains paramètres (donc' get_destructor' est une fonction) il renvoie quelque chose sur lequel '*' peut être appliqué (la fonction renvoie un pointeur). Le résultat de ce '*' est quelque chose sur lequel un paramètre de type 'void *' peut être appliqué (le pointeur est un pointeur vers une fonction). Appliquer ce paramètre donne quelque chose de type 'void', c'est-à-dire rien. Pour résumer: 'get_destructor' est une fonction qui prend des paramètres non spécifiés et retourne un pointeur vers une fonction qui prend un 'void *' et ne retourne rien. –

+0

@Thomas Pornin, merci pour votre clarification, maintenant les choses sont claires. –

7

Cela fonctionne:

typedef void (*Destructor)(void *data); 
Destructor getDestructor(); 
Questions connexes