2009-05-03 99 views
10

示例:一個函數(接受函數(即...)和一個int)和一個int。如何鍵入一個函數指針,該函數指針將自己的類型的函數作爲參數?

typedef void(*Func)(void (*)(void (*)(...), int), int); 

它以遞歸方式爆炸,其中(...)。有沒有一個根本的原因,這是不能做到或有另一種語法?在我看來,如果沒有演員陣容,這應該是可能的。我真的想通過一個調度表,但如果我能通過這個類型,我可以弄清楚。

+0

它是否遞歸地爆炸,還是它將「...」解釋爲變量而沒有實際指定可變參數點必須從哪裏開始的前一個參數? – 2009-05-03 05:22:38

+0

我知道我看到一個幾乎完全像這樣的SO問題,但我找不到它。 – 2009-05-03 05:29:35

回答

10

你可以用函數指針的結構:

struct fnptr_struct; 
typedef void (*fnptr)(struct fnptr_struct *); 
struct fnptr_struct { 
    fnptr fp; 
}; 

我不知道這是否是對鑄件的改善。我懷疑沒有結構體是不可能的,因爲C需要在使用它們之前定義類型,並且typedef沒有不透明的語法。

6

不可能直接做。唯一的選擇是使函數指針參數接受未指定的參數,或接受指向包含函數指針的結構的指針,如Dave suggested

// Define fnptr as a pointer to a function returning void, and which takes one 
// argument of type 'pointer to a function returning void and taking 
// an unspecified number of parameters of unspecified types' 
typedef void (*fnptr)(void (*)());