我在理解std::result_of
C++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);
}
我可以看到这两种解决方案的唯一问题是我们需要:
- 有一个函子的实例以在传递给 decltype 的表达式中使用它。
- 知道函子的定义构造函数。
我是否认为decltype
和之间的唯一区别result_of
是第一个需要表达而第二个不需要?