C++11 Lambda: Capturing Member Variables

C++11 Lambda : Capturing Member Variables

本文将介绍如下从外部域捕获成员变量,假设有一个OddCounter类,在其成员函数中使用lambda函数,并需要捕获成员变量:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
class OddCounter
{
// tracks the count of odd numbers encountered
int mCounter = 0;
public:
int getCount()
{
return mCounter;
}
void update(std::vector<int> & vec)
{
// Capturing member variable by value will not work
// Will result in Compile Error
std::for_each(vec.begin(), vec.end(), [mCounter](int element){
if(element % 2)
mCounter++; // Accessing member variable from outer scope
});
}
};

这种做法无论是将成员变量传值还是传引用都会出现编译错误。

Capturing Member variables inside Lambda Function

理想的做法是传递this指针的值,这样就可以访问外部成员变量了。

1
2
3
std::for_each(vec.begin(), vec.end(), [this](int element){
//....
}