Thật không may , chúng không phải là một phần của C ++ 11 ( http://ideone.com/NsqYuq ):
auto glambda = [](auto a) { return a; };
int main() {}
Với g ++ 4.7:
prog.cpp:1:24: error: parameter declared ‘auto’
...
Tuy nhiên , cách nó có thể được triển khai trong C ++ 14 theo đề xuất của Portland cho lambdas chung :
[](const& x, & y){ return x + y; }
Điều này sẽ dẫn đến phần lớn việc tạo ra một lớp trình hàm ẩn danh thông thường, nhưng với việc thiếu các loại, trình biên dịch sẽ phát ra một thành viên mẫu- operator()
:
struct anonymous
{
template <typename T, typename U>
auto operator()(T const& x, U& y) const -> decltype(x+y)
{ return x + y; }
};
Hoặc theo đề xuất mới hơn Đề xuất cho Biểu thức Lambda Chung (Đa hình)
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;
Vì vậy, có, đối với mỗi hoán vị của các tham số, một khởi tạo mới sẽ phát sinh, tuy nhiên, các thành viên của trình hàm đó sẽ vẫn được chia sẻ (tức là các đối số được bắt).