如何使用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(); 

http://ideone.com/e1XuYc

你需要一个type-id ,除了你删除了declarator-id之外,它基本上和声明一样。 declarator-iddeclarator-id通常是一个标识符,以及您在平等声明中声明的名称。

例如:

 int x 

declarator-idx所以只需将其删除:

 int 

同样:

 int x[10] 

删除x

 int[10] 

举个例子:

 void (*FunctionPtr)() 

这里declarator-idFunctionPtr 。 所以只要将其删除即可得到type-id

 void (*)() 

这是有效的,因为给定一个type-id你总是可以唯一地确定标识符去创build一个声明的地方。 从8.1.1中的标准:

如果构造是[声明],则可以唯一地标识[type-id]中标识符出现的位置。 指定的types与假设的标识符的types相同。

为了清晰起见,这个语法如何? (注意双括号)

 void func(); using FunctionPtr = decltype((func));