【问题标题】:What's the using equivalent of a function typedef?函数 typedef 的使用等价物是什么?
【发布时间】:2018-08-21 02:53:38
【问题描述】:

如何使用 new1using 关键字声明函数类型?

我知道如何使用它来声明函数指针类型。比如下面的typedef:

typedef int (*int_to_int)(int);

似乎等同于以下 using 声明:

using int_to_int = int (*)(int);

我如何对以下非指针 typedef 做同样的事情:

typedef int (int_to_intf)(int);

我的“删除 typedef 名称并将其放在 using 之后”算法不起作用:

using int_to_intf_u = int ()(int);  // nope, doesn't compile

goldbolt link


1 至少对于像我这样仍然将“新”定义为“在 C++11 中引入”的可怜人来说。

【问题讨论】:

  • 回想一下你是如何使用 std::function 的。
  • @liliscent - 哈哈,没错。我不知何故从未建立过联系(请参阅我在看到此之前写的答案中的 cmets,因为编辑时间戳不能证明这一点,您必须相信我的话)。

标签: c++ c++11 using-declaration


【解决方案1】:

只是int(int)。要获取抽象声明符,只需从实际声明中删除变量名。你要声明int f(int);,所以抽象声明符应该是int(int)

【讨论】:

  • 有趣,不知何故,我已经隐含地知道 std::function<?> 的语法了。这条规则很简单……所以反过来说:它能适应函数指针的情况吗?
  • @BeeOnRope 是的,因为在声明函数指针变量时需要额外的括号。
  • @BeeOnRope:要使其成为指针,请在名称旁边添加一个*int (*)(int)
  • 谢谢大家。一直认为(*) 周围的括号是基本的,但现在我知道它只是因为* 而需要。
  • 是的,它可以容纳指针,但是看起来又丑陋了。就我个人而言,我很乐意在使用新事物时加一颗星,或者声明第二个 using/typedef。
猜你喜欢
  • 1970-01-01
  • 2023-01-17
  • 2011-12-11
  • 1970-01-01
  • 1970-01-01
  • 2015-12-05
  • 2020-02-13
  • 2011-12-25
  • 2019-12-07
相关资源
最近更新 更多