Leerer Boost::Variant



  • Hallo,

    ich möchte ein Variant habe, der - neben anderen Werten - auch den Wert "leer" annehmen kann. Gibt es da eine andere Möglichkeit außer eine Klasse Empty zu definieren und

    boost::variant< int, double, Empty >
    

    zu verwenden?



  • was für einen sinn sollte ein datentyp haben, der nichts speichern kann? wofür brauchst du das?


  • Mod

    Jedes variant-Objekt kennt bereites einen leeren Zustand - dieses Feature erfordert keinen Overhead.



  • camper schrieb:

    Jedes variant-Objekt kennt bereites einen leeren Zustand - dieses Feature erfordert keinen Overhead.

    Hmm, hatte das Ding nicht sowas wie einen "niemals leer Garantie"? Wie bekommt man denn den leeren Zustand?


  • Mod

    Tachyon schrieb:

    camper schrieb:

    Jedes variant-Objekt kennt bereites einen leeren Zustand - dieses Feature erfordert keinen Overhead.

    Hmm, hatte das Ding nicht sowas wie einen "niemals leer Garantie"? Wie bekommt man denn den leeren Zustand?

    Gar nicht, hatte aus unerfindlichen Gründen an any gedacht.



  • TravisG schrieb:

    was für einen sinn sollte ein datentyp haben, der nichts speichern kann? wofür brauchst du das?

    Ich habe einen speziellen Graphen, in dem jeder Knoten entweder

    • einen Knoten vom Typ A als Vorgänger oder
    • einen Knoten vom Typ B als Vorgänger oder
    • gar keinen Vorgänger

    hat.

    Den Vorgänger eines Knoten will ich in einem Variant speichern.


  • Mod

    boost::variant benutzt in-place-Speicherung für die Werte, das macht es für Knoten eines Graphen eher ungeignet (es sei denn, du speicherts Zeiger statt Objekten ab, und dann stellt sich die Frage nach einem Nulltyp eigentlich nicht mehr). boost::any scheint mir die logischere Wahl zu sein.


Anmelden zum Antworten