C++ STL bao gồm các hàm generic hữu ích như std::for_each. Tuy nhiên chúng có thể khá cồng kềnh khi sử dụng, đặc biệt nếu functor bạn muốn áp dụng là duy nhất cho hàm cụ thể đó. Vì vậy hàm bạn tạo sẽ chỉ tồn tại trong namespace đó được dùng ở một nơi. Giải pháp là dùng hàm vô danh (anonymous functions).
C++ giới thiệu biểu thức lambda (lambda expressions) trong C++11 để cho phép tạo hàm vô danh. Ví dụ:
Ví dụ
#include <iostream>
#include <vector>
#include <algorithm> // for_each
using namespace std;
int main() {
vector<int> myvector;
myvector.push_back(1);
myvector.push_back(2);
myvector.push_back(3);
for_each(myvector.begin(), myvector.end(), [](int x) {
cout << x*x << endl;
});
}
Kết quả
1 4 9
(int x) dùng để định nghĩa tham số lambda được gọi với. [] dùng để truyền biến từ phạm vi cục bộ vào phạm vi bên trong lambda, gọi là capturing variables. Các biểu thức đơn giản có thể tự suy diễn kiểu. Bạn cũng có thể cung cấp kiểu rõ ràng:
[](int x) -> double {
return x/2.0;
}