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?
-
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?
-
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.
-
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.