比较 std::function 与 std::bind 创建的

Compare std::function created with 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 == f3f2 == f4,这里的 == 比较器意味着两个 std::function 对象对应于相同的相同方法对象?

你不知道。

如果你想要==你必须编写你自己的类型擦除包装器,可能使用std::function来存储状态。

由于 std::bind 不支持 == 并且 lamba 也不支持,因此您必须注入 支持的自定义函数对象 == 类型擦除。

None 其中很容易。其他解决方案,例如使用名称注册绑定,将更加实用。