Vinculando a um weak_ptr

Existe uma maneira destd :: bind para um std :: weak_ptr? Eu gostaria de armazenar um retorno de chamada "função fraca" que automaticamente "desconecta" quando o receptor é destruído.

Eu sei como criar um std :: function usando um shared_ptr:

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

No entanto, a função std :: retornada mantém meu objeto vivo para sempre. Então eu gostaria de ligá-lo a umweak_ptr:

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

Mas isso não compila. (std :: bind não aceitará weak_ptr!) Existe alguma maneira de se ligar a um weak_ptr?

Eu encontrei discussões sobre isso (veja abaixo), mas parece não haver nenhuma implementação padrão. Qual é a melhor solução para armazenar uma "função fraca", em particular se o Boost não estiver disponível?

Discussões / pesquisas (todas elas usam Boost e não são padronizadas):

weak_functionligação weak_ptrligação "fraca" (e umconsertar para isso)weak_fnOutroweak_fn

questionAnswers(7)

yourAnswerToTheQuestion