น่าเสียดายที่พวกเขาไม่ได้เป็นส่วนหนึ่งของ C ++ 11 ( http://ideone.com/NsqYuq ):
auto glambda = [](auto a) { return a; };
int main() {}
ด้วย g ++ 4.7:
prog.cpp:1:24: error: parameter declared ‘auto’
...
อย่างไรก็ตามวิธีที่อาจนำไปใช้ใน C ++ 14 ตามข้อเสนอของพอร์ตแลนด์สำหรับ lambdas ทั่วไป :
[](const& x, & y){ return x + y; }
สิ่งนี้จะส่งผลให้ส่วนที่ใหญ่ที่สุดคือการสร้างคลาส functor ที่ไม่ระบุชื่อตามปกติ แต่การขาดประเภทคอมไพเลอร์จะปล่อยสมาชิกที่เป็นเทมเพลต - operator()
:
struct anonymous
{
template <typename T, typename U>
auto operator()(T const& x, U& y) const -> decltype(x+y)
{ return x + y; }
};
หรือตามข้อเสนอ Proposal สำหรับนิพจน์ทั่วไป (Polymorphic) Lambda Expressions
auto L = [](const auto& x, auto& y){ return x + y; };
--->
struct /* anonymous */
{
template <typename T, typename U>
auto operator()(const T& x, U& y) const // N3386 Return type deduction
{ return x + y; }
} L;
ใช่สำหรับการเปลี่ยนพารามิเตอร์ทุกครั้งการสร้างอินสแตนซ์ใหม่จะเกิดขึ้นอย่างไรก็ตามสมาชิกของ functor นั้นจะยังคงถูกแชร์ (เช่นอาร์กิวเมนต์ที่จับได้)