如何声明一个函数指针指向一个函数,该函数采用与参数相同的函数指针?
我已经尝试了以下但没有成功:
typedef void (*fnptr)(void (*)());
void func(fnptr)
{
/* ... */
}
void func2(fnptr)
{
/* ... */
}
void main()
{
fnptr fn = &func;
func2(fn);
}
这可能吗?
最佳答案
我很怀疑,但你可以通过引入一个结构来获得所需的递归。
struct Rec;
typedef void (*RecFun)(const Rec&);
struct Rec {
RecFun fun;
};
使用示例:
#include <iostream>
void nothing(const Rec& rec) {}
Rec recNothing = { nothing };
void f(const Rec& rec)
{
std::cout << "f\n";
rec.fun(recNothing);
}
Rec recF = { f };
void g(const Rec& rec)
{
std::cout << "g\n";
rec.fun(recNothing);
}
Rec recG = { g };
int main()
{
recF.fun(recG);
}
更新:根据 Chris、Vitus 和 Johannes 的建议,这里有一些方便的隐式转换(如 Herb Sutter 的 GotW #57 ):
struct Rec;
typedef void (*RecFun)(const Rec&);
struct Rec {
RecFun fun;
Rec(RecFun fun) : fun(fun) {}
operator RecFun() const { return fun; }
};
关于c++ - 指向接受函数指针的函数的函数指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6128344/