4

我有一个函数,我希望从函数的返回类型中自动推导出返回计算值的变量。

我已经看到Decltype 用于返回成员函数的函数,并且我知道使用decltype(func()) vari 可以获得返回类型。但这仅适用于没有参数的函数。如果我有一个参数,我必须decltype(func(/* some dummy value convertible to argument type*/))获取返回类型。

有什么方法可以在不需要指定虚拟值的情况下执行上述操作?

auto func(int a) -> std::deque<decltype(a)> {

  // lots of code

  /* ideally */
  decltype(func)::return_type result;

  /* fill result*/

  return result;
}
4

1 回答 1

8

您需要指定参数类型,因为不同的重载可以有不同的返回类型。

您可以使用以下命令指定一个虚拟参数declval

#include <utility>

decltype(func(std::declval<ArgType>())) result;

或者您可以通过使用类型特征来避免给出虚拟值:

#include <type_traits>

std::result_of<decltype(func), ArgType>::type result;
于 2013-09-12T10:25:15.780 回答