簡體   English   中英

Function 指針,具有“模板化”返回類型和 arguments

[英]Function pointer with “templated” return type and arguments

所以我想要一個 function 接收一個 function 指針,具有“未知”返回類型和 arguments。 function 應該返回與它作為參數接收的 function 相同的類型。 我想過這樣的事情,但它不起作用:

template<typename type, typename... param>
type do_sth(type (*func)(param... args))
{
  // ...
  type ret = func(std::forward<param>(args)...);
  // ...
  return ret;
}

我這樣做是因為我必須在 function 本身之前和之后執行一些其他功能。

這樣的事情甚至可能嗎? 絕對可以使用定義(但沒有返回值)。 但是因為它們不受命名空間的影響,所以我想使用 function。

使用 define 語句,它看起來像這樣(不返回任何內容):

#define do_sth(x) /*...*/\
                  x;\
                  /*...*/

您需要分別通過 function 和 arguments :

template<typename type, typename... param>
type do_sth(type (*func)(param...), param... args)

演示

請注意,如果你這樣做,你會遇到一些隱式轉換的麻煩。

您也可以直接按類型接受 function,但獲取返回類型有點復雜:

template<typename F, typename... param>
std::invoke_result_t<F, param...> do_sth(F func, param... args)

std::invoke_result是 C++17 (但在 C++11 中也有result_of )。 在這個版本中,隱式轉換工作得很好。

演示

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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