如何使用"using"关键字定义函数prototype/signature
How to use the "using" keyword to define a function prototype/signature
在我努力移植我的 C++ 代码以更好地(和更一致地)使用 "Modern C++," 的过程中,我最新一轮的更改涉及将 typedef int32_t I2Arr[2]
别名替换为更现代的 using I2Arr = int32_t[2]
样式.这适用于 'simple'(标量)类型,对于定义函数指针特别有用:
using IFunc = int32_t(*)(int32_t, int32_t);
看起来比
更清晰(恕我直言)
typedef int32_t(IFunc*)(int32_t, int32_t);
但是,我对替换 typedef
实际函数原型(而不是指向函数的指针)感到有些困惑。例如,我有以下代码,使用 'old-style':
typedef int32_t MaskMaker(int32_t, const uint8_t *, uint8_t *);
static MaskMaker *maskMakers[maskNum];
现在,也许(可能)我在这里真的很昏暗,但我只是想不出一种方法将其转换为 using
风格的别名。谁能告诉我怎么做?
using MaskMaker = int32_t(int32_t, const uint8_t *, uint8_t *);
就是这样,真的。
这与 typedef 声明的方法相同。
using MaskMaker = int32_t( int32_t, int32_t );
static MaskMaker *maskMakers[maskNum];
所以如果你有这样的声明
typedef int32_t MaskMaker(int32_t, const uint8_t *, uint8_t *);
然后只需移动别名声明左侧的名称 MaskMaker
并删除 decl-specifier typedef..
typedef int32_t MaskMaker(int32_t, const uint8_t *, uint8_t *);
using MaskMaker = int32_t (int32_t, const uint8_t *, uint8_t *);
顺便注意一下,typedef 声明也可以像
int32_t typedef MaskMaker(int32_t, const uint8_t *, uint8_t *);
也就是说,它可以相对于其他声明说明符以任何顺序放置。:)
并且因为别名声明和 typedef 声明都是声明,所以它们可以一起出现。例如
int32_t typedef MaskMaker(int32_t, const uint8_t *, uint8_t *);
using MaskMaker = int32_t (int32_t, const uint8_t *, uint8_t *);
static MaskMaker *maskMakers[maskNum];
在我努力移植我的 C++ 代码以更好地(和更一致地)使用 "Modern C++," 的过程中,我最新一轮的更改涉及将 typedef int32_t I2Arr[2]
别名替换为更现代的 using I2Arr = int32_t[2]
样式.这适用于 'simple'(标量)类型,对于定义函数指针特别有用:
using IFunc = int32_t(*)(int32_t, int32_t);
看起来比
更清晰(恕我直言)typedef int32_t(IFunc*)(int32_t, int32_t);
但是,我对替换 typedef
实际函数原型(而不是指向函数的指针)感到有些困惑。例如,我有以下代码,使用 'old-style':
typedef int32_t MaskMaker(int32_t, const uint8_t *, uint8_t *);
static MaskMaker *maskMakers[maskNum];
现在,也许(可能)我在这里真的很昏暗,但我只是想不出一种方法将其转换为 using
风格的别名。谁能告诉我怎么做?
using MaskMaker = int32_t(int32_t, const uint8_t *, uint8_t *);
就是这样,真的。
这与 typedef 声明的方法相同。
using MaskMaker = int32_t( int32_t, int32_t );
static MaskMaker *maskMakers[maskNum];
所以如果你有这样的声明
typedef int32_t MaskMaker(int32_t, const uint8_t *, uint8_t *);
然后只需移动别名声明左侧的名称 MaskMaker
并删除 decl-specifier typedef..
typedef int32_t MaskMaker(int32_t, const uint8_t *, uint8_t *);
using MaskMaker = int32_t (int32_t, const uint8_t *, uint8_t *);
顺便注意一下,typedef 声明也可以像
int32_t typedef MaskMaker(int32_t, const uint8_t *, uint8_t *);
也就是说,它可以相对于其他声明说明符以任何顺序放置。:)
并且因为别名声明和 typedef 声明都是声明,所以它们可以一起出现。例如
int32_t typedef MaskMaker(int32_t, const uint8_t *, uint8_t *);
using MaskMaker = int32_t (int32_t, const uint8_t *, uint8_t *);
static MaskMaker *maskMakers[maskNum];