Bindung an einen weak_ptr

Gibt es einen Weg zustd :: bind an ein std :: weak_ptr? Ich möchte einen Rückruf mit "schwacher Funktion" speichern, der automatisch "trennt", wenn der Angerufene zerstört wird.

Ich kann eine std :: -Funktion mit einem shared_ptr erstellen:

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

Die zurückgegebene Funktion std :: hält mein Objekt jedoch für immer am Leben. Also würde ich es gerne an einen bindenweak_ptr:

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

Das lässt sich aber nicht kompilieren. (std :: bind akzeptiert kein weak_ptr!) Gibt es eine Möglichkeit, an ein weak_ptr zu binden?

Ich habe Diskussionen darüber gefunden (siehe unten), aber es scheint keine Standardimplementierung zu geben. Was ist die beste Lösung zum Speichern einer "schwachen Funktion", insbesondere wenn Boost nicht verfügbar ist?

Diskussionen / Forschung (alle diese nutzen Boost und sind nicht standardisiert):

schwache_funktionschwache_ptr Bindung"schwache" Bindung (und einFix dafür)weak_fnEin weitererweak_fn

Antworten auf die Frage(7)

Ihre Antwort auf die Frage