Ist es bei einem Lambda möglich, den Parametertyp und den Rückgabetyp herauszufinden? Wenn ja, wie?
Grundsätzlich möchte ich, lambda_traits
welche auf folgende Arten verwendet werden kann:
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
Die Motivation dahinter ist, dass ich lambda_traits
in einer Funktionsvorlage verwenden möchte, die ein Lambda als Argument akzeptiert, und ich muss den Parametertyp und den Rückgabetyp innerhalb der Funktion kennen:
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!
//...
}
Wir können vorerst davon ausgehen, dass das Lambda genau ein Argument hat.
Anfangs habe ich versucht, mit folgenden Elementen zu arbeiten std::function
:
template<typename T>
A<T> f(std::function<bool(T)> fun)
{
return A<T>(fun);
}
f([](int){return true;}); //error
Aber es würde offensichtlich Fehler geben. Also habe ich es in die TLambda
Version der Funktionsvorlage geändert und möchte das std::function
Objekt innerhalb der Funktion erstellen (wie oben gezeigt).