2010-03-26 26 views
1

我有以下問題:書面方式爲指針消氣劑的功能

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

會有什麼返回「析構函數一個函數簽名'從結構? 例如,返回「大小」功能的簽名是:

unsigned int nmlist_size(nmlist *list); 

什麼將成爲「析構函數」的情況。

+0

試圖在C中編寫C++嗎?我不羨慕你。 – 2010-03-26 14:01:13

+0

@ T.E.D。其實非常令人耳目一新:)。 – 2010-03-26 14:38:59

回答

3

一般形式:

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

具體形式將取決於哪些參數get_destructor應該採取。如果你剛剛從struct nmlist_s的實例返回析構指針,那麼它看起來像

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

謝謝,語法有點奇怪,但這是我一直在尋找的。 – 2010-03-26 13:41:47

+2

@nomemory:語法是_inductive_。它讀作:'get_destructor'是這樣的,當應用一些參數時(因此'get_destructor'是一個函數)它返回可以應用'*'的東西(該函數返回一個指針)。該'*'的結果是可以應用類型爲'void *'的參數的東西(指針是指向函數的指針)。應用該參數會產生「void」類型的東西,即沒有任何東西。總結一下:'get_destructor'是一個函數,它接受一些未指定的參數,並返回一個指向一個函數的指針,該函數接受一個'void *'並且不返回任何內容。 – 2010-03-26 13:57:50

+0

@Thomas Pornin,謝謝你的澄清,現在事情很清楚。 – 2010-03-26 14:01:09

7

這將工作:

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