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_type 和 new_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
.
从 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_type 和 new_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
.