Enlace a un valor débil

Hay una manera destd :: enlazar a un std :: weak_ptr? Me gustaría almacenar una devolución de llamada de "función débil" que se "desconecta" automáticamente cuando se destruye la llamada.

Sé cómo crear una función std :: utilizando un shared_ptr:

std::function<void()> MyClass::GetCallback()
{
    return std::function<void()>(std::bind(&MyClass::CallbackFunc, shared_from_this()));
}

Sin embargo, la función std :: devuelta mantiene mi objeto vivo para siempre. Así que me gustaría atarlo a unadébil_ptr:

std::function<void()> MyClass::GetCallback()
{
    std::weak_ptr<MyClass> thisWeakPtr(shared_from_this());
    return std::function<void()>(std::bind(&MyClass::CallbackFunc, thisWeakPtr));
}

Pero eso no compila. (std :: bind no aceptará weak_ptr!) ¿Hay alguna forma de enlazar a un weak_ptr?

He encontrado discusiones sobre esto (ver más abajo), pero parece que no hay una implementación estándar. ¿Cuál es la mejor solución para almacenar una "función débil", en particular si Boost no está disponible?

Discusiones / investigación (todas ellas utilizan Boost y no están estandarizadas):

función débilencuadernación débilencuadernación "débil" (y unfijar para ello)débil_fnOtrodébil_fn

Respuestas a la pregunta(7)

Su respuesta a la pregunta