让以下函数:
returntype Foo(void(*bar)(const C&));
为了让Foo返回传递的函数__ functor aka bar,应该插入什么而不是returntype
<H4和gt方法1和lt/h4和gt
C++11的一个选项是在返回类型中使用占位符类型auto
和decltype
,使用尾部返回类型语法,如下所示:
auto Foo(void(*bar)(const C&)) -> decltype(bar); //this is more readable than method 2 below
<h4和gt方法2和lt/h4和gt
void (*Foo(void(*bar)(const C&)))(const C&); //less readable than method 1 above
如我们所见,方法1比方法2更具可读性.
假设您有一个函数void bar(const C&)
,并考虑Foo(bar)
.
为了调用返回的函数指针,需要首先对其进行解引用,(*Foo(bar))
,然后向其传递一个const C&
(将其称为"the_C"):
(*Foo(bar))(the_c)
由于fn
返回void
,您现在可以填写以下类型:
void (*Foo(void(*bar)(const C&)))(const C&)
^ ^ ^ ^
| |<- parameter ->| | parameter for the returned function
|
Ultimate result
或者,你可以决定不放弃你的理智,并命名类型:
using function = void(*)(const C&);
function Foo(function bar);
直接方法如下
或者可以使用using或typedef别名,如
在那之后