最佳答案
我在理解 C + + 0x 中对 std::result_of
的需求时遇到了一些麻烦。如果我理解正确的话,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);
}
我认为这两种解决方案的唯一问题是,我们需要:
我认为 decltype
和 result_of
之间的唯一区别是第一个需要一个表达式,而第二个不需要,这种想法对吗?