Лямбды нельзя сравнивать - PullRequest
2 голосов
/ 04 января 2011

Мне было интересно, является ли это Standard, или ошибка в моем коде. Я пытаюсь сравнить пару своих доморощенных функциональных объектов. Я отклонил сравнение, если тип функционального объекта не совпадает, поэтому я знаю, что две лямбды имеют одинаковый тип. Так почему их нельзя сравнивать?

Ответы [ 2 ]

3 голосов
/ 07 февраля 2011

Каждый лямбда-объект C ++ 0x имеет отдельный тип, даже если подпись одна и та же.

auto l1=[](){}; // one do-nothing lambda
auto l2=[](){}; // and another
l1=l2; // ERROR: l1 and l2 have distinct types

Если две лямбды C ++ 0x имеют одинаковый тип, они, следовательно, должны быть из одной строки кода.Конечно, если они захватывают переменные, они не обязательно будут идентичны, так как они могут быть получены из разных вызовов.

Однако лямбда-код C ++ 0x не имеет операторов сравнения, поэтому сравнивать нельзяэкземпляры, чтобы увидеть, действительно ли они одного и того же или просто одного и того же типа.Это имеет смысл, если подумать: если у захваченных переменных нет операторов сравнения, то вы не можете сравнивать лямбда-выражения этого типа, поскольку каждая копия может иметь разные значения для захваченных переменных.

0 голосов
/ 04 января 2011

Оператор равенства перегружен для вашего лямбда-объекта? Если нет, то я предполагаю, что вам нужно это реализовать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...