Написание геттера для указателя на функцию - PullRequest
1 голос
/ 26 марта 2010

У меня следующая проблема:

"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 ***/

Какой будет подпись для функции, которая возвращает ' деструктор ' из структуры? Например, подпись функции, которая возвращает ' size ':

unsigned int nmlist_size(nmlist *list);

Что будет с деструктором 1016 *.

Ответы [ 2 ]

7 голосов
/ 26 марта 2010

Это будет работать:

typedef void (*Destructor)(void *data);
Destructor getDestructor();
3 голосов
/ 26 марта 2010

Общая форма:

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

Точная форма будет зависеть от того, какие параметры должен принимать get_destructor. Если вы просто возвращаете указатель деструктора из экземпляра struct nmlist_s, то он будет выглядеть как

void (*get_destructor(struct nmlist_s list))(void *data);
...