我试图声明一个方法typedef,其中包含方法类型本身的指针参数 - 这可能吗?
方法看起来像:
void myFunc(FuncType* pFunc, int a) {}
其中myFunc
是一个匹配FuncType
的声明,所以我可以设置一个变量并像这样调用它:
FuncType f = myFunc;
f(&f, 5);
我尝试将与此方法匹配的typedef声明为:
typedef void (*FuncType)(FuncType*, int);
但这不起作用,因为在完全声明之前需要FuncType
。我可以通过将参数设置为void指针来解决这个问题,但是有一些解决方法;也许是通过FuncType
的某种形式的前瞻性声明?
答案 0 :(得分:1)
这是不可能的;函数不能采用自己类型的参数(或返回这样的东西) 对于所有相当强大的类型系统都是如此。
唯一的解决方法是通过其他类型引入间接,就像使用void*
一样。
这类似于一个类如何不能将自身的实例包含为成员,你可以通过指向或引用来实现它。
答案 1 :(得分:0)
你不仅 NOT 声明这样的typedef
,你也不能声明这样的功能。它导致无限递归。
以下是这样的函数声明的样子:
void myFunc(void (*pFunc)(...), int a);
...
将扩展为:
void (*pFunc)(...), int)
...
将扩展为:
void (*pFunc)(...), int)