Lets say I have these lines of code;
std::vector<int> ints; std::for_each(ints.begin(), ints.end(), [](int& val){ val = 7; });
However, I dont want to specify the argument type in my lambda functions, ie, I want to write something like this;
std::for_each(ints.begin(), ints.end(), [](auto& val){ val = 7; });
Is there anyway this can be achieved?
(boost::lambda doesn't need types to be specified...)
Update:
For now I use a macro: #define _A(container) decltype(*std::begin(container))
so I can do:
std::for_each(ints.begin(), ints.end(), [](_A(ints)& val){ val = 7; });
Immediately invoked lambda expression is a lambda expression which is immediately invoked as soon as it is defined. For example, #include<iostream> using namespace std; int main(){ int num1 = 1; int num2 = 2; // invoked as soon as it is defined auto sum = [] (int a, int b) { return a + b; } (num1, num2);
Mutable specification Typically, a lambda's function call operator is const-by-value, but use of the mutable keyword cancels this out. It doesn't produce mutable data members. The mutable specification enables the body of a lambda expression to modify variables that are captured by value.
All lambdas are inline. Not all calls to them are necessarily inlined.
No. "Polymorphic lambdas" is what this feature was referred to during the C++ committee discussions, and it was not standardized. The parameter types of a lambda must be specified.
You can use decltype
though:
std::for_each(ints.begin(), ints.end(), [](decltype(*ints.begin())& val){ val = 7; });
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With