从函数模板类型中提取返回类型

Ale*_*oks 1 c++ templates c++11

我有一个类似于以下内容的包装函数:

template<typename Func, typename ... Args>
void func(Func f, Args ... args) {
  ...
  f(args...);
  ...
}
Run Code Online (Sandbox Code Playgroud)

Func是否可以在编译时从类型中提取返回类型?

例如,用户拥有代码并按func以下方式调用:

template<typename T>
T add(const T& l, const T& r) {
  return l + r;
}

int main(int argc, char** argv) {
  double a = 4.5, b = 5.5;
  func(add<double>, a, b);
  return 0;
}
Run Code Online (Sandbox Code Playgroud)

我们可以在调用中推断出func一个函数被传递给它并返回一个 吗double?我想将返回类型信息用于内部的其他内容func

Pra*_*ian 6

以下任一操作都应该有效

using result_type = decltype(std::declval<Func>()(std::declval<Args>()...));
Run Code Online (Sandbox Code Playgroud)

或者

using result_type = typename std::result_of<Func(Args...)>::type;
Run Code Online (Sandbox Code Playgroud)

现场演示