C++中复杂的Typedef

nik*_*ikk 5 c++ typedef

据我所知,typedef可用于定义新的自定义类型,例如:

// simple typedef
typedef unsigned long ulong;

// the following two objects have the same type 
unsigned long l1;
ulong l2;
Run Code Online (Sandbox Code Playgroud)

我最近遇到了这个typedef,并且在解读声明中发生的事情时迷失了方向:

typedef int16_t CALL_CONVENTION(* product_init_t)(product_descript_t *const description)
Run Code Online (Sandbox Code Playgroud)

有人可以指导我并解释这是做什么的吗?

编辑:将NEW_TYPE更改为CALL_CONVENTION.这是一个定义.谢谢你发现了这一点.

Ale*_*exD 10

它将type声明product_init_t为指向函数的指针

  • 取参数product_descript_t *const description;
  • 回报int16_t;
  • 使用调用约定CALL_CONVENTION(正如@MM建议,即使它被错误命名).

PS因为" 2016年的完整答案应该展示现代的写作方式type-alias "(@Howard Hinnant),这里是:

using product_init_t = int16_t (CALL_CONVENTION *)(product_descript_t *const description);
Run Code Online (Sandbox Code Playgroud)

  • `NEW_TYPE`可能是一个链接或调用约定说明符; 不是返回类型的一部分 (2认同)