Связывание со слабым_птром

Есть ли способ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

Ответы на вопрос(7)

Ваш ответ на вопрос