Bir lambda verildiğinde, parametre türünü ve dönüş türünü bulmak mümkün müdür? Evetse, nasıl?
Temel olarak, lambda_traits
aşağıdaki şekillerde kullanılabilmesini istiyorum :
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
Arkasındaki motivasyon lambda_traits
, bir lambda'yı bağımsız değişken olarak kabul eden bir işlev şablonunda kullanmak istiyorum ve bunun işlev içinde parametre türü ve dönüş türü olduğunu bilmem gerekiyor:
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!
//...
}
Şimdilik, lambda'nın tam olarak bir argüman aldığını varsayabiliriz.
Başlangıçta şu şekilde çalıştım std::function
:
template<typename T>
A<T> f(std::function<bool(T)> fun)
{
return A<T>(fun);
}
f([](int){return true;}); //error
Ama belli ki hata verirdi. Bu yüzden onu TLambda
işlev şablonunun sürümüne değiştirdim ve işlevin std::function
içindeki nesneyi oluşturmak istiyorum (yukarıda gösterildiği gibi).