Связывание со слабым_птром
Есть ли способstd::bind to a 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 не будет принимать слабый_птр!) Есть ли способ привязки к слабому_птр?
Я нашел обсуждения по этому поводу (см. Ниже), но, похоже, стандартной реализации нет. Каково наилучшее решение для хранения «слабой функции», в частности, если Boost недоступен?
Обсуждения / исследования (все они используют Boost и не стандартизированы):
weak_function weak_ptr binding "weak" binding (and a fix for it) weak_fn Another weak_fn