typedef void(*MyCallback):它是什么以及如何使用它?

Far*_*rah 2 c++ pointers typedef void

我是一名Java开发人员.

我正在尝试理解一个C/C++项目,我发现它:

*.h 档案:

typedef void (*MyCallback) (MyHandle handle, void* context, MyResult result, ... );
int MyMethod(MyHandle handle, void* context, MyCallback cb);
Run Code Online (Sandbox Code Playgroud)

*.cpp 文件:

int MyMethod(MyHandle handle, void* context, MyCallback cb){

   //...

}
Run Code Online (Sandbox Code Playgroud)

而我真的没有得到它的意义......

任何人都可以向我解释这是什么意思typedef void?我只使用简单的typedef来处理简单的结构......但是在这个中我可以看到一个可怕的指针(对于Java开发人员而言,抱歉指针恐惧症......).

而且,为什么我们这样做typedef ?? 我没有MyCallBackMyMethod功能上看到任何指针.

我需要了解这段代码的含义.

非常感谢!

fre*_*low 7

这个特殊的方法typedef引入了一个类型别名,命名MyCallback为"获取句柄,上下文和结果以及返回void的函数的指针".如果您将函数MyCallback作为参数,则可以将指针作为参数传递给具体的回调函数:

void someFunction(MyCallback callback);
void someCallback(MyHandle handle, void* context, MyResult result, ...);

someFunction(&someCallback);
someFunction( someCallback);   // the & is optional
Run Code Online (Sandbox Code Playgroud)

请注意,这仅适用someCallback于顶级函数或静态成员函数.非静态成员函数(aka方法)是完全不同的野兽.

如果您只是被C声明符语法混淆,C++ 11允许以下替代方法:

using MyCallback = void (*)(MyHandle handle, void* context, MyResult result,...);
Run Code Online (Sandbox Code Playgroud)