Можно ли выяснить тип параметра и тип возврата лямбда?

Учитывая лямбду, возможно ли выяснить ее тип параметра и тип возвращаемого значения? Если да, то как?

В основном я хочуlambda_traits который можно использовать следующими способами:

auto lambda = [](int i) { return long(i*10); };

lambda_traits<decltype(lambda)>::param_type  i; //i should be int
lambda_traits<decltype(lambda)>::return_type l; //l should be long

Мотивация заключается в том, что я хочу использоватьlambda_traits в шаблоне функции, который принимает лямбду в качестве аргумента, и мне нужно знать, что это тип параметра и тип возвращаемого значения внутри функции:

template<typename TLambda>
void f(TLambda lambda)
{
   typedef typename lambda_traits<TLambda>::param_type  P;
   typedef typename lambda_traits<TLambda>::return_type R;

   std::function<R(P)> fun = lambda; //I want to do this!
   //...
}

Пока можно предположить, что лямбда принимает ровно один аргумент.

Изначально я пытался работать сstd::function как:

template<typename T>
A<T> f(std::function<bool(T)> fun)
{
   return A<T>(fun);
}

f([](int){return true;}); //error

Но это, очевидно, даст ошибку. Поэтому я изменил это наTLambda версия шаблона функции и хотите построитьstd::function объект внутри функции (как показано выше).

Ответы на вопрос(4)

Ваш ответ на вопрос