gpt4 book ai didi

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

转载 作者:可可西里 更新时间:2023-11-01 18:21:37 27 4
gpt4 key购买 nike

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

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

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/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com