如何比较C(Visual Studio 2010)中的两个lambda函数?
std::function<void ()> lambda1 = []() {}; std::function<void ()> lambda2 = []() {}; bool eq1 = (lambda1 == lambda1); bool eq2 = (lambda1 != lambda2);
我得到一个编译错误,声称operator ==是不可访问的.
编辑:我试图比较函数实例.所以lambda1 == lambda1应该返回true,而lambda1 == lambda2应返回false.
解决方法
您无法比较std :: function对象,因为
std::function
is not equality comparable. lambda的闭包类型也不相等.
但是,如果你的lambda没有捕获任何东西,那么lambda本身就可以被转换成一个函数指针,而函数指针是相等的(但是据我所知,这是完全没有指定的,不管这个例子中is_1and2_equal是true还是false)
void(*lambda1)() = []() { }; void(*lambda2)() = []() { }; bool are_1and1_equal = (lambda1 == lambda1); // will be true bool are_1and2_equal = (lambda1 == lambda2); // may be true?
Visual C++ 2010 does not support this conversion.直到Visual C被释放之前,转换没有添加到C 0x.