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)
| 归档时间: |
|
| 查看次数: |
1043 次 |
| 最近记录: |