参数类型自动扣除和匿名lambda函数

Vik*_*ehr 34 c++ lambda c++11

可以说我有这些代码行;

std::vector<int> ints;
std::for_each(ints.begin(), ints.end(), [](int& val){ val = 7; });
Run Code Online (Sandbox Code Playgroud)

但是,我不想在我的lambda函数中指定参数类型,即我想写这样的东西;

std::for_each(ints.begin(), ints.end(), [](auto& val){ val = 7; });
Run Code Online (Sandbox Code Playgroud)

无论如何这可以实现吗?

(boost :: lambda不需要指定类型......)


更新:

现在我使用宏:#define _A(container) decltype(*std::begin(container))所以我可以这样做:

std::for_each(ints.begin(), ints.end(), [](_A(ints)& val){ val = 7; });
Run Code Online (Sandbox Code Playgroud)

Ant*_*ams 30

没有."Polymorphic lambdas"是C++委员会讨论期间提到的这个特性,并没有标准化.必须指定lambda的参数类型.

你可以使用decltype:

std::for_each(ints.begin(), ints.end(), [](decltype(*ints.begin())& val){ val = 7; });
Run Code Online (Sandbox Code Playgroud)

  • 多态/通用lambdas是C++ 14的一部分:http://en.wikipedia.org/wiki/C%2B%2B14#Generic_lambdas (3认同)
  • 该死的,我尽可能经常使用auto开发了很好的流量. (2认同)
  • typedef decltype(*beg(ints))type; 如果你认为decltype语法是费力的. (2认同)

Dav*_*one 15

您的首选语法在C++ 14中是合法的,并且被称为通用lambda或多态lambda.

http://isocpp.org/blog/2013/04/n3649-generic-polymorphic-lambda-expressions-r3

auto lambda = [](auto x) { return x; };
lambda(5);
lambda("hello");
lambda(std::vector<int>({5, 4, 3}));
Run Code Online (Sandbox Code Playgroud)

我想现在的问题是,为什么我们不能将这种语法用于常规函数?

auto && f(auto && x){return x; }