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

C++ 如何将方法指针声明为typedef方法参数,c++,C++,我试图声明一个包含方法类型本身的指针参数的方法typedef,这可能吗 方法看起来像: void myFunc(FuncType* pFunc, int a) {} 其中myFunc是一个与FuncType匹配的声明,因此我可以设置一个变量并如下调用它: FuncType f = myFunc; f(&f, 5); 我已尝试将与此方法匹配的typedef声明为: typedef void (*FuncType)(FuncType*, int); 但这不起作用,因为在完全声明之前需要

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

方法看起来像:

void myFunc(FuncType* pFunc, int a) {}
其中
myFunc
是一个与
FuncType
匹配的声明,因此我可以设置一个变量并如下调用它:

FuncType f = myFunc;
f(&f, 5);
我已尝试将与此方法匹配的typedef声明为:

typedef void (*FuncType)(FuncType*, int);
但这不起作用,因为在完全声明之前需要
FuncType
。我可以通过将参数设置为空指针来解决这个问题,但是有没有办法解决这个问题;也许通过某种形式的向前声明
FuncType

不仅不能声明这样的
typedef
,而且也不能声明这样的函数。它导致无限递归

下面是这样一个函数声明的样子:

void myFunc(void (*pFunc)(...), int a);
其中,
将扩展到:

void (*pFunc)(...), int)
void (*pFunc)(...), int)
其中,
将扩展到:

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

这是不可能的,;函数不能接受自己类型的参数(或返回这样的内容)。
这是所有相当强大的类型系统的情况

唯一的解决方法是通过另一种类型引入间接寻址,就像您对
void*
所做的那样


这类似于类不能将自身的实例包含为成员,而通过指针或引用间接地解决这一问题。

递归在哪里?我所做的就是调用一个函数,并给它传递一个指针和一个整数。@adelphus“递归”在类型级别,而不是函数本身。好的,我明白了。我不同意的原因是参数是指向类型的指针,而不是类型本身。这就是如何声明结构和类以包含它们自己的成员——声明指向该结构或类的指针,类型系统将设法对其进行排序。@adelphus,不幸的是,您不能这样做。您唯一的选择是使用
void*
并在使用参数进行函数调用之前强制转换参数。是的,我也这么认为。我认为,通过将参数声明为指向该类型的指针,我可以像结构和类一样摆脱它。显然不是。