函数指针指向一个带有函数指针的函数

Osk*_*ker 7 c++ function-pointers

如何声明一个指向函数的函数指针,该函数使用与参数相同的函数指针?

我试过以下但没有成功:

typedef void (*fnptr)(void (*)());

void func(fnptr)
{
    /* ... */
}

void func2(fnptr)
{
    /* ... */
}

void main()
{
    fnptr fn = &func;
    func2(fn);
}
Run Code Online (Sandbox Code Playgroud)

这可能吗?

ant*_*kos 13

我非常怀疑它,但你可以通过引入一个结构来获得所需的递归.

struct Rec;

typedef void (*RecFun)(const Rec&);

struct Rec {
    RecFun fun;
};
Run Code Online (Sandbox Code Playgroud)

使用示例:

#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);
}
Run Code Online (Sandbox Code Playgroud)

更新:根据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; }
};
Run Code Online (Sandbox Code Playgroud)