如何获得调用另一种类型的仿函数的返回类型?

时间:2014-06-16 13:10:03

标签: c++ templates c++11

鉴于类型TArgumentTFunctor,如何找到调用TFunctor实例的结果类型,其参数类型为TArgument

这是我笨拙,肮脏的解决方案:

template <class TFunctor, typename TArgument>
class ReturnValue
{
public:
     typedef decltype(functor_(arguent_)) Type;

private:
     static TFunctor functor_;
     static TArgument arguent_;
}

但要使其正常工作,TFunctorTArgument都需要默认构造。

有更好的方法吗?

1 个答案:

答案 0 :(得分:7)

typedef decltype(std::declval<TFunctor>()(std::declval<TArgument>())) Type;

或使用std::result_of

typedef typename std::result_of<TFunctor(TArgument)>::type Type;