C++ lambda运算符==

Ran*_*oet 14 c++ lambda

如何比较C++中的两个lambda函数(Visual Studio 2010)?

std::function<void ()> lambda1 = []() {};
std::function<void ()> lambda2 = []() {};
bool eq1 = (lambda1 == lambda1);
bool eq2 = (lambda1 != lambda2);
Run Code Online (Sandbox Code Playgroud)

我收到一个编译错误,声称operator ==无法访问.

编辑:我正在尝试比较函数实例.所以lambda1 == lambda1应该返回true,而lambda1 == lambda2应该返回false.

Jam*_*lis 14

您无法比较std::function对象,因为它们 std::function不具有可比性.lambda的闭包类型也不具有可比性.

但是,如果你的lambda没有捕获任何东西,lambda本身可以转换为函数指针,并且函数指针是相等的(但是,据我所知,完全没有说明是否在这个例子中are_1and2_equaltruefalse):

void(*lambda1)() = []() { };
void(*lambda2)() = []() { };
bool are_1and1_equal = (lambda1 == lambda1); // will be true
bool are_1and2_equal = (lambda1 == lambda2); // may be true?
Run Code Online (Sandbox Code Playgroud)

Visual C++ 2010不支持此转换.直到Visual C++发布之前,转换才被添加到C++ 0x.