相关疑难解决方法(0)

如何推导出仿函数的返回值类型?

我想写一个模板函数,它接受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吗?有更优雅的方式吗?

c++ templates c++11

15
推荐指数
1
解决办法
1673
查看次数

标签 统计

c++ ×1

c++11 ×1

templates ×1