我想编写一个模板函数,它接受 2 个值和一个仿函数或 lambda。该函数使用这些值调用函子并返回结果。
template <typename T, typename Fn>
_ReturnTypeOfPred_ Apply(T x, T y, Fn fn)
{
return fn(x, y);
}
问题:我怎样才能定义返回类型Apply
等于返回类型Fn
?它不一定等于T
,就像这个函子的例子一样
template <typename T>
auto Sum(T x, T y) -> decltype(x+y)
{
return x+y;
}
更新
第一个例子过于简单化了。这个应该工作吗?
template <typename TContainer, typename Fn>
auto Apply(const TContainer& x, const TContainer& y, Fn fn) -> decltype(fn(x.front(), y.front()))
{
return fn(x.front(), y.front());
}
如果我重复返回类型的return
表达式,它总是有效吗?decltype
有没有更优雅的方式?