C++:特殊的类型定义

C++: Peculiar typedef

my understanding 开始,typedef 语法为:

typedef existing_type new_type_name;

但是,在 Chrome's v8 namespace 中,有许多 typedef 似乎可以与某些其他语法一起使用。例如,

typedef void(*  FunctionCallback )(const FunctionCallbackInfo< Value > &info)

有两点我不明白:
1- FunctionCallbackInfo< Value > 是在命名空间中定义的 class,而 FunctionCallback 不是;现有类型不是应该排在第一位吗?
2- existing_typenew_type_name 之间没有空格

正确的阅读方式是什么?

编辑:我正在获取 this tutorial 中的所有类型定义信息。

typedef void(*  FunctionCallback )(const FunctionCallbackInfo< Value > &info)

将类型 FunctionCallback 定义为指向接受 const FunctionCallbackInfo< Value > & 并返回 void 的函数的指针。我一直在推广这个规则,我发现它在阅读复杂的指针声明时非常有用:The ``Clockwise/Spiral Rule''。老歌但金曲 ;)

您对typedef语法的理解有点不准确。不是:

typedef existing_type new_type_name;

更像是:

typedef declaration;

因此,您的示例是一个 typedef 声明,用于名为 FunctionCallback 的函数指针类型,其中 returns void 并引用 const FunctionCallbackInfo< Value > 作为唯一的参数。

理解 typedef 的最好方法是不要将其视为

typedef existing_type new_type_name;

理解这一点的最好方法是将它与常规变量或 class 成员声明进行比较。例如:

char *ptr_func;

这将 ptr_func 声明为指向字符的指针。现在,当你在它前面加上一个 typedef 时,你实际上是在把它变成一个类型定义,而不是一个变量声明:

typedef char *ptr_func;

这现在将 ptr_func 声明为表示指向字符的指针的类型。

现在,让我们将您的示例视为变量声明:

void(*FunctionCallback )(const FunctionCallbackInfo< Value > &info);

这是什么?好吧,这声明了一个 FunctionCallback ,它是一个指向函数的指针,该函数接受一个 const FunctionCallbackInfo<value> & 参数,返回一个 void.

因此,从逻辑上讲,在 this 前面加上 typedef 会将其定义为 FunctionCallback 作为一种类型,该类型是指向采用 [=18= 的函数的指针]参数,返回一个void.