如何将方法指针声明为typedef方法参数

时间:2016-11-25 20:16:58

标签: c++

我试图声明一个方法typedef,其中包含方法类型本身的指针参数 - 这可能吗?

方法看起来像:

void myFunc(FuncType* pFunc, int a) {}

其中myFunc是一个匹配FuncType的声明,所以我可以设置一个变量并像这样调用它:

FuncType f = myFunc;
f(&f, 5);

我尝试将与此方法匹配的typedef声明为:

typedef void (*FuncType)(FuncType*, int);

但这不起作用,因为在完全声明之前需要FuncType。我可以通过将参数设置为void指针来解决这个问题,但是有一些解决方法;也许是通过FuncType的某种形式的前瞻性声明?

2 个答案:

答案 0 :(得分:1)

这是不可能的;函数不能采用自己类型的参数(或返回这样的东西) 对于所有相当强大的类型系统都是如此。

唯一的解决方法是通过其他类型引入间接,就像使用void*一样。

这类似于一个类如何不能将自身的实例包含为成员,你可以通过指向或引用来实现它。

答案 1 :(得分:0)

你不仅 NOT 声明这样的typedef,你也不能声明这样的功能。它导致无限递归。

以下是这样的函数声明的样子:

void myFunc(void (*pFunc)(...), int a);

...将扩展为:

void (*pFunc)(...), int)

...将扩展为:

void (*pFunc)(...), int)