std::result_ofC++0x での必要性を理解するのに苦労しています。私が正しく理解していればresult_of、特定のタイプのパラメーターを持つ関数オブジェクトを呼び出す結果のタイプを取得するために使用されます。例えば:
template <typename F, typename Arg>
typename std::result_of<F(Arg)>::type
invoke(F f, Arg a)
{
return f(a);
}
次のコードとの違いはよくわかりません。
template <typename F, typename Arg>
auto invoke(F f, Arg a) -> decltype(f(a)) //uses the f parameter
{
return f(a);
}
また
template <typename F, typename Arg>
auto invoke(F f, Arg a) -> decltype(F()(a)); //"constructs" an F
{
return f(a);
}
これらの 2 つのソリューションで私が確認できる唯一の問題は、次のいずれかを行う必要があることです。
- decltype に渡される式で使用するファンクタのインスタンスを用意します。
- ファンクターの定義済みコンストラクターを知っている。
decltypeとの唯一の違いresult_ofは、最初のものには式が必要であるのに対し、2 番目のものには必要がないということであると考えるのは正しいでしょうか?