c++ - 指向接受函数指针的函数的函数指针

标签 c++ function-pointers

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

我已经尝试了以下但没有成功:

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/

相关文章:

c++ - Nim 变体游戏策略 - StoneGameStrategist - SRM 309

c - C 中的函数指针如何工作?

c++ - 如何为模板类的成员函数定义静态数组?

C++11:boost::make_tuple 与 std::make_tuple 有何不同?

c++ - 编译器未标记 HRESULT 的错误返回值

java - 为工作使用正确的工具 : embedded programming

c++ - c/c++ 中是否有一个函数可以获取整数符号并删除值?

c++ - 将捕获的 lambda 作为函数指针传递

C++通过类模板函数中的指针访问类方法

c - 带函数指针参数的函数指针