繁体   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