C++ STL มีฟังก์ชันทั่วไปที่เป็นประโยชน์ เช่น std::for_each น่าเสียดายที่พวกเขาสามารถใช้งานได้ค่อนข้างยุ่งยาก โดยเฉพาะอย่างยิ่งหาก functor ที่คุณต้องการใช้นั้นไม่ซ้ำกับฟังก์ชันเฉพาะ ดังนั้นฟังก์ชันที่คุณจะสร้างนี้จะอยู่ในเนมสเปซนั้นเพียงแค่ถูกใช้ในที่เดียว วิธีแก้ไขคือใช้ฟังก์ชันที่ไม่ระบุตัวตน
C++ ได้แนะนำนิพจน์แลมบ์ดาใน C++11 เพื่อให้สามารถสร้างฟังก์ชันที่ไม่ระบุตัวตนได้
ตัวอย่าง
#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;
});
} ผลลัพธ์
สิ่งนี้จะให้ผลลัพธ์ -
1 4 9
(int x) ใช้เพื่อกำหนดอาร์กิวเมนต์ที่นิพจน์แลมบ์ดาจะถูกเรียกด้วย [] ใช้เพื่อส่งผ่านตัวแปรจากขอบเขตโลคัลไปยังขอบเขตภายในของแลมบ์ดา ซึ่งเรียกว่าการจับตัวแปร นิพจน์เหล่านี้ถ้าง่าย สามารถอนุมานประเภทได้โดยอัตโนมัติ คุณยังสามารถระบุข้อมูลประเภทได้อย่างชัดเจนโดยใช้ไวยากรณ์ต่อไปนี้ -
ไวยากรณ์
[](int x) -> double {
return x/2.0;
} หากต้องการสำรวจ C++ lambdas โดยละเอียด ให้ไปที่เธรด StackOverflow - https://stackoverflow.com/questions/7627098/what-is-a-lambda-expression-in-c11