[英]Returning a function object from a function C++
讓以下功能:
returntype Foo(void(*bar)(const C&));
應該插入什么而不是“returntype”以便 Foo 返回傳遞的函數\functor aka 'bar'
C++11 的一種選擇是在返回類型中使用占位符類型auto
和decltype
使用尾隨返回類型語法,如下所示:
auto Foo(void(*bar)(const C&)) -> decltype(bar); //this is more readable than method 2 below
void (*Foo(void(*bar)(const C&)))(const C&); //less readable than method 1 above
我們可以看到,方法 1 比方法 2更具可讀性。
直接的方法如下
void ( *Foo(void(*bar)(const C&)) ( const C & );
或者您可以使用 using 或 typedef 別名,例如
using Fp = void ( * )( const C & );
or
typedef void ( *Fp )( const C & );
在那之后
Fp Foo( Fp bar );
假設您有一個函數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);
我用模板功能解決了它:
template<typename F>
F foo(F func)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.