比较 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 == f3
和 f2 == f4
,这里的 ==
比较器意味着两个 std::function
对象对应于相同的相同方法对象?
你不知道。
如果你想要==
你必须编写你自己的类型擦除包装器,可能使用std::function
来存储状态。
由于 std::bind
不支持 ==
并且 lamba 也不支持,因此您必须注入 支持的自定义函数对象 ==
类型擦除。
None 其中很容易。其他解决方案,例如使用名称注册绑定,将更加实用。
这是一个玩具示例
#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
对象对应于相同的相同方法对象?
你不知道。
如果你想要==
你必须编写你自己的类型擦除包装器,可能使用std::function
来存储状态。
由于 std::bind
不支持 ==
并且 lamba 也不支持,因此您必须注入 支持的自定义函数对象 ==
类型擦除。
None 其中很容易。其他解决方案,例如使用名称注册绑定,将更加实用。