Учитывая лямбду, возможно ли выяснить ее тип параметра и тип возвращаемого значения?Если да, то как?
По сути, я хочу 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
внутри функции (как показано выше).