boost::any und boost::shared_ptr



  • Ich habe hier gerade einen riesen Stress und will nur folgendes wissen: Darf ich einen beliebigen boost::shared_ptr<typename> (oder meinetwegen auch andere Smart Pointer...) als boost::any ablegen? Ich brauche ein möglichst allgemein gehaltenes Interface einen Haufen fast gleich aussehender Templates... 😉

    MfG



  • /rant/ schrieb:

    Ich habe hier gerade einen riesen Stress und will nur folgendes wissen: Darf ich einen beliebigen boost::shared_ptr<typename> (oder meinetwegen auch andere Smart Pointer...) als boost::any ablegen?

    Ja. Du müsstest alles, was kopierbar ist, in einem boost::any Objekt speichern können.

    /rant/ schrieb:

    Ich brauche ein möglichst allgemein gehaltenes Interface einen Haufen fast gleich aussehender Templates... 😉

    Aha. Ich würde boost::any vermeiden, soweit es geht. Vielleicht gibt es in Deinem Fall eine elegantere Variante. Mehr kann man jetzt dazu nicht sagen, weil Du so gut wie nichts verraten hast.

    Gruß,
    SP



  • Wenn du die Typ-Sicherheit von boost::any nicht brauchst, könntest du auch einen shared_ptr<void> verwenden.
    Mit static_pointer_cast<T>(spvoid) bekommst du dann wieder den originalen shared_ptr<T> - nur eben wie gesagt ohne Check. T muss also stimmen, und wenn T nicht stimmt, gibt's halt UB.



  • Sebastian Pizer schrieb:

    /rant/ schrieb:

    Ich brauche ein möglichst allgemein gehaltenes Interface einen Haufen fast gleich aussehender Templates... 😉

    Aha. Ich würde boost::any vermeiden, soweit es geht. Vielleicht gibt es in Deinem Fall eine elegantere Variante. Mehr kann man jetzt dazu nicht sagen, weil Du so gut wie nichts verraten hast.

    Es geht hier um Garbage Collection, Serialization und Runtime Type Information. Ich habe einen prinzipiell beliebigen, dynamisch verschachtelten Baum, dessen Knoten über eine Schnittstelle erweitertes RTTI anbieten (Identifizierung, Kon- und Destruktoraufrufe, Layoutdaten etc.), welcher von meiner selbstgebauten GC mittels Smart Pointern verwaltet wird. Einen solchen Baum versuche ich nun mittels Serialisierung zu speichern bzw. zu laden. Zu diesem Zweck beabsichtige ich, die Knotentypen als serializable zu markieren, indem ich über RTTI einen formatunabhängigen Serializer anbiete. Ich brauche boost::any , weil ich eine allgemeine Schnittstelle brauche und trotzdem auf Typsicherheit angewiesen bin. Pretty much high-level stuff 😉

    MfG



  • Nach deiner Beschreibung kann ich mir grad garnicht vorstellen, wo du hier boost::any brauchen könntest.

    p.S.: wieso willst du in C++ einen GC implementieren?


Anmelden zum Antworten