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

How to declare a method pointer as a typedef method parameter

本文关键字:方法 Typedef 参数 声明 指针      更新时间:2023-10-16

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

一种方法看起来像:

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

其中 myFunc是与 FuncType匹配的声明,因此我可以设置一个变量并这样称呼为:

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

我试图将匹配此方法匹配的Typedef声明为:

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

但这是行不通的,因为在完全声明它之前需要FuncType。我可以通过将参数设置为void指针来解决此问题,但是有某种方法可以解决此问题。也许通过某种形式的 FuncType的正向声明?

这是不可能的;一个函数不能使用自己类型的参数(或返回这样的东西)。
所有合理强大的类型系统都是这种情况。

唯一的解决方法是像使用void*一样通过另一种类型引入间接。

这类似于类别如何包含自身作为成员的实例,您通过通过指针或参考来间接工作。

您不仅可以声明这种 typedef,而且您也无法声明这种函数。它导致无限递归。

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

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

...将扩展到:

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

...将扩展到:

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