2つの値とファンクターまたはラムダを受け入れるテンプレート関数を作成したいと思います。この関数は、これらの値を使用してファンクターを呼び出し、結果を返します。
template <typename T, typename Fn>
_ReturnTypeOfPred_ Apply(T x, T y, Fn fn)
{
return fn(x, y);
}
Apply
質問:の返品タイプをの返品タイプと等しくなるように定義するにはどうすればよいFn
ですか?T
このファンクターの例のように、必ずしもに等しいとは限りません。
template <typename T>
auto Sum(T x, T y) -> decltype(x+y)
{
return x+y;
}
アップデート
最初の例は単純化されすぎていました。これは機能する必要がありますか?
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());
}
リターンタイプのreturn
式を繰り返しても、常に機能しますか?decltype
もっとエレガントな方法はありますか?