簡體   English   中英

從函數 C++ 返回函數對象

[英]Returning a function object from a function C++

讓以下功能:

returntype Foo(void(*bar)(const C&));

應該插入什么而不是“returntype”以便 Foo 返回傳遞的函數\functor aka 'bar'

方法一

C++11 的一種選擇是在返回類型中使用占位符類型autodecltype使用尾隨返回類型語法,如下所示:

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM