4

計算された値を返す変数を、関数の戻り値の型から自動的に推定したい関数があります。

メンバー関数の関数を返すための Decltype を見たことがありますが、decltype(func()) var私は戻り値の型を取得できることを知っています。ただし、これはパラメーターのない関数に対してのみ機能します。パラメータがある場合は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 に答える