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