เมื่อพิจารณาแลมบ์ดาเป็นไปได้ไหมที่จะหาประเภทพารามิเตอร์และประเภทการส่งคืน ถ้าใช่อย่างไร
โดยพื้นฐานแล้วฉันต้องการ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วัตถุภายในฟังก์ชัน (ดังที่แสดงด้านบน)