Сравните std::function, созданный с помощью std::bind

Вот пример игрушки

#include <iostream>
#include <functional>

struct Obj
{
  int x;

  int foo()
  {
    return 42;
  }
};

int main()
{
  Obj a, b;
  std::function<int()> f1 = std::bind(&Obj::foo, &a);
  std::function<int()> f2 = std::bind(&Obj::foo, &b);
  std::function<int()> f3 = std::bind(&Obj::foo, &a);
  std::function<int()> f4 = std::bind(&Obj::foo, &b);
}

Как я могу проверить, что f1 == f3 и f2 == f4, где компаратор ==, здесь означает, что оба объекта std::function соответствуют одному и тому же методу одного и того же объекта?


person valentin    schedule 28.11.2017    source источник


Ответы (1)


Вы не знаете.

Если вы хотите ==, вам придется написать свою собственную оболочку для стирания типов, возможно, используя std::function для хранения состояния.

Поскольку std::bind не поддерживает ==, как и лямба, вам придется внедрить объект пользовательской функции, который поддерживает == для удаления типа.

Ни один из них не является легким. Альтернативные решения, такие как регистрация привязок с именами, будут более практичными.

person Yakk - Adam Nevraumont    schedule 28.11.2017