Maalesef , C ++ 11'in ( http://ideone.com/NsqYuq ) parçası değiller :
auto glambda = [](auto a) { return a; };
int main() {}
G ++ 4.7 ile:
prog.cpp:1:24: error: parameter declared ‘auto’
...
Bununla birlikte , genel lambdalar için Portland önerisine göre C ++ 14'te uygulanma şekli :
[](const& x, & y){ return x + y; }
Bu, en büyük kısım için, anonim bir functor sınıfının olağan yaratılmasını sağlar, ancak türlerin olmaması durumunda, derleyici şablonlu bir üye yayınlar- operator()
:
struct anonymous
{
template <typename T, typename U>
auto operator()(T const& x, U& y) const -> decltype(x+y)
{ return x + y; }
};
Veya yeni teklife göre Genel (Polimorfik) Lambda İfadeleri Önerisi
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;
Yani evet, parametrelerin her permütasyonu için yeni bir örnekleme ortaya çıkacaktır, ancak bu functorun üyeleri yine de paylaşılacaktır (yani yakalanan argümanlar).