Есть ли способ std:: bind к std:: weak_ptr? Я хотел бы сохранить обратный вызов "слабой функции", который автоматически "отключается", когда вызываемый пользователь уничтожается.
Я знаю, как создать std:: function с помощью shared_ptr:
std::function<void()> MyClass::GetCallback()
{
return std::function<void()>(std::bind(&MyClass::CallbackFunc, shared_from_this()));
}
Однако возвращаемая функция std:: сохраняет мой объект навсегда. Поэтому я хотел бы привязать его к weak_ptr:
std::function<void()> MyClass::GetCallback()
{
std::weak_ptr<MyClass> thisWeakPtr(shared_from_this());
return std::function<void()>(std::bind(&MyClass::CallbackFunc, thisWeakPtr));
}
Но это не компилируется. (std:: bind не принимает никакой слабой_ptr!) Есть ли способ привязки к weak_ptr?
Я нашел обсуждения об этом (см. ниже), но, похоже, нет стандартной реализации. Какое лучшее решение для хранения "слабой функции", в частности, если Boost недоступен?
Обсуждения/исследования (все они используют Boost и не стандартизированы):