2009-05-03 106 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 (*)());