如何使用C ++ 11 using语法typedef函数指针?
我想写这个
typedef void (*FunctionPtr)();
使用using
。 我该怎么做?
它有一个类似的语法,除了从指针中删除标识符:
using FunctionPtr = void (*)();
这是一个例子
如果你想“拿走丑陋”,试试Xeobuild议的:
#include <type_traits> using FunctionPtr = std::add_pointer<void()>::type;
这是另一个演示 。
如果避免input指针,“丑”也可以被带走:
void f() {} using Function_t = void(); Function_t* ptr = f; ptr();
你需要一个type-id
,除了你删除了declarator-id
之外,它基本上和声明一样。 declarator-id
符declarator-id
通常是一个标识符,以及您在平等声明中声明的名称。
例如:
int x
declarator-id
是x
所以只需将其删除:
int
同样:
int x[10]
删除x
:
int[10]
举个例子:
void (*FunctionPtr)()
这里declarator-id
是FunctionPtr
。 所以只要将其删除即可得到type-id
:
void (*)()
这是有效的,因为给定一个type-id
你总是可以唯一地确定标识符去创build一个声明的地方。 从8.1.1中的标准:
如果构造是[声明],则可以唯一地标识[type-id]中标识符出现的位置。 指定的types与假设的标识符的types相同。
为了清晰起见,这个语法如何? (注意双括号)
void func(); using FunctionPtr = decltype((func));