我在理解C++ 0x中需要std::result_of
時遇到了一些麻煩。如果我理解正確,result_of
用於獲取調用具有特定類型參數的函數對象的結果類型。例如:std :: result_of和decltype之間的區別
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);
}
唯一的問題我可以用這兩種解決方案看到的是,我們需要:
- 有一個實例的函子在傳遞給decltype的表達式中使用它。
- 知道函數的定義構造函數。
我說得對不對在想,decltype
和result_of
之間的唯一區別是,而第二個不第一個需要表達?
好的,所以它主要是一個方便的類來避免decltype中的醜陋表達,對嗎? – 2010-04-22 12:09:31
@Luc:是的。 :)(遲到!) – GManNickG 2011-02-24 04:21:16
@GMan:遲到比從未好;)! – 2011-02-24 16:43:07