如何更改下面的代码以使用 weak_ptr 而不是 shared_ptr 并保留指定方法名称的能力(如在 std::bind 中所做的那样)? std::bind 似乎不支持 weak_ptr,因为它需要检查 weak_ptr。
void foo::a()
{
m_class.do1(
std::function<void(int)>(
std::bind(&foo::b, shared_from_this(), std::placeholders::_1)));
}
void foo::b(int i)
{
}
最佳答案
你可以使用 lambda:
void foo::a()
{
std::weak_ptr<foo> w {shared_from_this()};
auto l = [w](int i) {
auto ptr = w.lock();
if (ptr) {
ptr->b(i);
}
};
m_class.run(l);
}
关于c++ - 如何将仿函数与 bind 和 weak_ptr 结合使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37744647/