给定类型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
都必须默认可构造。有没有更好的办法?
最佳答案
typedef decltype(std::declval<TFunctor>()(std::declval<TArgument>())) Type;
或使用
std::result_of
:typedef typename std::result_of<TFunctor(TArgument)>::type Type;