Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/145.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 带两组括号的Typedef?_C++ - Fatal编程技术网

C++ 带两组括号的Typedef?

C++ 带两组括号的Typedef?,c++,C++,我在一些代码中遇到了一个typedef,它是这样的: typedef void (NE_API *NeWindowProcCallback)(void* hWnd, NEuint uMsgId, NEuint wParam, NEuint64 lParam); 但是,我不熟悉这种语法。有人能解释一下吗 此外,如果我跳转到NE_API的声明,我会发现: # define NE_API __stdcall 我认为这可能与答案有关,对此的解释也将非常感谢。谢谢。这是函数指针的typedef,函

我在一些代码中遇到了一个typedef,它是这样的:

typedef void (NE_API *NeWindowProcCallback)(void* hWnd, NEuint uMsgId, NEuint wParam, NEuint64 lParam);
但是,我不熟悉这种语法。有人能解释一下吗

此外,如果我跳转到NE_API的声明,我会发现:

#   define NE_API __stdcall

我认为这可能与答案有关,对此的解释也将非常感谢。谢谢。

这是函数指针的typedef,函数返回
void
,具有
\uu stdcall
调用约定,并接受四个参数。因此,您可以将具有此签名的任何函数的地址分配给
NeWindowProcCallback
类型的变量。然后,可以将此变量作为参数传递给需要回调函数的其他函数。有关如何使用函数指针的更多详细信息,请参阅。

您可以在此处查看stdcall的内容: 至于typedef-这是定义函数的方式。现在,NeWindowProcCallback类型将是一个指向函数的指针,该函数采用类型为(void*hWnd、NEuint-uMsgId、NEuint-wParam、NEuint64-lParam)的参数

因此,您可以:

void  foo(void* hWnd, NEuint uMsgId, NEuint wParam, NEuint64 lParam);


int main() {
  NeWindowProcCallback my_func = foo;
  ....
  // use the pointer
}

NeWindowProcCallback
是函数指针的类型。它接受参数
void*hWnd、NEuint uMsgId、NEuint wParam、NEuint64 lParam
,并返回
void

\uu stdcall
是,它决定了在生成的调用程序集代码中应该如何传递参数。

typedef将NeWindowProcCallback定义为一种类型,该类型存储指向返回void的函数的指针,并将(void*hWnd、NEuint uMsgId、NEuint wParam、NEuint64 lParam)作为参数