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