C++11 Lambdas can';无可比拟

C++11 Lambdas can';无可比拟,c++11,C++11,我想知道这是标准的,还是我代码中的错误。我试图比较一对我自己开发的函数对象。如果函数对象的类型不同,我拒绝了比较,因此我知道两个lambda是相同的类型。那么为什么不能对它们进行比较呢?是否为lambda对象重载了相等运算符?如果不是,我假设您需要实现它。每个C++0x lambda对象都有不同的类型,即使签名是相同的 auto l1=[](){}; // one do-nothing lambda auto l2=[](){}; // and another l1=l2; // ERROR:

我想知道这是标准的,还是我代码中的错误。我试图比较一对我自己开发的函数对象。如果函数对象的类型不同,我拒绝了比较,因此我知道两个lambda是相同的类型。那么为什么不能对它们进行比较呢?

是否为lambda对象重载了相等运算符?如果不是,我假设您需要实现它。

每个C++0x lambda对象都有不同的类型,即使签名是相同的

auto l1=[](){}; // one do-nothing lambda
auto l2=[](){}; // and another
l1=l2; // ERROR: l1 and l2 have distinct types
如果两个C++0x lambda具有相同的类型,则它们必须来自同一行代码。当然,如果它们捕获变量,那么它们就不一定相同,因为它们可能来自不同的调用


但是,C++0x lambda没有任何比较运算符,因此无法比较实例以查看它们是否确实相同,或者只是相同的类型。仔细想想,这是有道理的:如果捕获的变量没有比较运算符,则无法比较该类型的lambda,因为每个副本可能有不同的捕获变量值。

问题的关键是我认为应该提供一个。我认为您需要实现一个比较运算符。我相信问题是当你继承操作符时需要重新定义。你知道lambda是什么吗@Dead无法做到这一点,因为他没有实现lambda的,编译器实现了。但他正在比较他的“自制”版本。我问他是否为他创建的类实现了一个比较运算符。这个问题说明我正在尝试这样做。当你说“自制”时,你的意思是你显式声明了一个包含运算符()的类吗?还是您使用了新的lambda语法?@templatetypedef:我的意思是这是我自己版本的std::function,它是通过继承和类型擦除实现的。您到底想比较什么,以及如何比较?