【问题标题】:C++: Peculiar typedef [duplicate]C ++:特殊的typedef [重复]
【发布时间】:2015-08-10 07:22:00
【问题描述】:

来自my understanding,typedef语法为:

typedef existing_type new_type_name;

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

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

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

阅读本文的正确方法是什么?

编辑:我在 this tutorial 中获取所有 typedef 信息。

【问题讨论】:

标签: c++ typedef v8


【解决方案1】:

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

typedef existing_type new_type_name;

更像是:

typedef declaration;

因此,您的示例是一个名为 FunctionCallback 的函数指针类型的 typedef 声明,它返回 void 并将对 const FunctionCallbackInfo&lt; Value &gt; 的引用作为其唯一参数。

【讨论】:

  • 是的。基本上,在任何有效声明前加上 typedef 会创建一个类型别名而不是变量。
【解决方案2】:

理解 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&lt;value&gt; &amp; 参数的函数的指针,返回一个void

因此,从逻辑上讲,在 this 前面添加 typedef 会将其转换为 FunctionCallback 的定义,该类型是指向采用 const FunctionCallbackInfo&lt;value&gt; &amp; 参数的函数的指针,返回 void .

【讨论】:

    【解决方案3】:
    typedef void(*  FunctionCallback )(const FunctionCallbackInfo< Value > &info)
    

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

    【讨论】:

      猜你喜欢
      • 2018-07-28
      • 2020-08-23
      • 2012-06-28
      • 2012-04-20
      • 1970-01-01
      • 2016-01-16
      • 1970-01-01
      • 2011-09-19
      • 2012-11-12
      相关资源
      最近更新 更多