Dato un lambda, è possibile capire il tipo di parametro e il tipo restituito? Se si, come?
Fondamentalmente, voglio lambda_traits
che può essere utilizzato nei seguenti modi:
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
La motivazione dietro è che voglio usare lambda_traits
in un modello di funzione che accetta un lambda come argomento, e ho bisogno di sapere il tipo di parametro e il tipo restituito all'interno della funzione:
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!
//...
}
Per il momento, possiamo supporre che il lambda prenda esattamente un argomento.
Inizialmente, ho provato a lavorare con std::function
:
template<typename T>
A<T> f(std::function<bool(T)> fun)
{
return A<T>(fun);
}
f([](int){return true;}); //error
Ma ovviamente darebbe errore. Quindi l'ho cambiato in TLambda
versione del modello di funzione e voglio costruire l' std::function
oggetto all'interno della funzione (come mostrato sopra).