【问题标题】:Typedef with two sets of brackets?带有两组括号的typedef?
【发布时间】:2012-03-19 22:04:37
【问题描述】:

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

typedef void (NE_API *NeWindowProcCallback)(void* hWnd, NEuint uMsgId, NEuint wParam, NEuint64 lParam);

但是,我不熟悉这种语法。谁能解释一下?

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

#   define NE_API __stdcall

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

【问题讨论】:

    标签: c++


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

      你可以在这里看到 __stdcall 是什么: What is __stdcall? 至于 typedef - 这是 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
      }
      

      【讨论】:

        【解决方案3】:

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

        __stdcall 是calling convention,它决定了在生成的调用汇编代码中应如何传递参数。

        【讨论】:

          【解决方案4】:

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

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2018-07-15
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2011-04-10
            • 1970-01-01
            相关资源
            最近更新 更多