#c #templates #c 11
#c #шаблоны #c 11
Вопрос:
Заданные типы 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
должны быть конструктивными по умолчанию.
Есть ли лучший способ?
Ответ №1:
typedef decltype(std::declval<TFunctor>()(std::declval<TArgument>())) Type;
Или с помощью std::result_of
:
typedef typename std::result_of<TFunctor(TArgument)>::type Type;