Враховуючи лямбда, чи можна з'ясувати, що це тип параметра та тип повернення? Якщо так, то як?
В основному, я хочу, 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
об'єкт всередині функції (як показано вище).