我想写一个模板函数,它接受2个值和一个函子或一个lambda.该函数使用这些值调用仿函数并返回结果.
template <typename T, typename Fn>
_ReturnTypeOfPred_ Apply(T x, T y, Fn fn)
{
return fn(x, y);
}
Run Code Online (Sandbox Code Playgroud)
问题:如何定义返回类型Apply等于返回类型Fn?它不一定等于T,在这个仿函数的例子中
template <typename T>
auto Sum(T x, T y) -> decltype(x+y)
{
return x+y;
}
Run Code Online (Sandbox Code Playgroud)
更新
第一个例子过于简单了.这个应该有用吗?
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());
}
Run Code Online (Sandbox Code Playgroud)
如果我在返回类型中重复return表达式,它会一直有效decltype吗?有更优雅的方式吗?