[英]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.