鉴于类型TArgument
和TFunctor
,如何找到调用TFunctor
实例的结果类型,其参数类型为TArgument
?
这是我笨拙,肮脏的解决方案:
template <class TFunctor, typename TArgument>
class ReturnValue
{
public:
typedef decltype(functor_(arguent_)) Type;
private:
static TFunctor functor_;
static TArgument arguent_;
}
但要使其正常工作,TFunctor
和TArgument
都需要默认构造。
有更好的方法吗?
答案 0 :(得分:7)
typedef decltype(std::declval<TFunctor>()(std::declval<TArgument>())) Type;
或使用std::result_of
:
typedef typename std::result_of<TFunctor(TArgument)>::type Type;