C ++:特殊的typedef

时间:2015-05-28 00:51:48

标签: c++ typedef v8

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信息。

3 个答案:

答案 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''。老歌但是金牌;)