从my understanding开始,typedef语法为:
typedef existing_type new_type_name;
但是,在Chrome's v8 namespace中,有许多typedef似乎与其他语法一起使用。例如,
typedef void(* FunctionCallback )(const FunctionCallbackInfo< Value > &info)
有两件事我不明白:
1- FunctionCallbackInfo&lt;价值&gt;是命名空间中定义的类,而FunctionCallback不是;是不是应该先出现的现有类型?
2-没有空格分隔 existing_type 和 new_type_name
阅读本文的正确方法是什么?
编辑:我正在this tutorial中获取所有typedef信息。
答案 0 :(得分:8)
您对typedef
语法的理解有点不准确。它不是:
typedef existing_type new_type_name;
更像是:
typedef declaration;
因此,您的示例是名为typedef
的函数指针类型的FunctionCallback
声明,它返回void
并将const FunctionCallbackInfo< Value >
作为唯一参数引用
答案 1 :(得分:3)
理解typedef的最佳方法是不要将其视为
typedef existing_type new_type_name;
理解这一点的最佳方法是将其与常规变量或类成员声明进行比较。例如:
char *ptr_func;
这将ptr_func
声明为指向字符的指针。现在,当你在它前面贴上typedef
时,你实际上是将它变成了一个类型定义,而不是一个变量声明:
typedef char *ptr_func;
现在将ptr_func
声明为表示字符指针的类型。
现在,让我们将您的示例看作变量声明:
void(*FunctionCallback )(const FunctionCallbackInfo< Value > &info);
这是什么?好吧,这声明了一个FunctionCallback
,它是一个带有const FunctionCallbackInfo<value> &
参数的函数的指针,返回void
。
因此,从逻辑上讲,在此前面加上typedef
会将此变为FunctionCallback
的定义,作为指向带const FunctionCallbackInfo<value> &
参数的函数的指针的类型,返回void
。
答案 2 :(得分:1)
typedef void(* FunctionCallback )(const FunctionCallbackInfo< Value > &info)
将类型FunctionCallback
定义为指向const FunctionCallbackInfo< Value > &
并返回void
的函数的指针。我一直在推广这条规则,我发现这对于阅读复杂的指针声明非常有用:The ``Clockwise/Spiral Rule''。老歌但是金牌;)