"Variant member" ist in 9.5 / 8 von C ++ 11 definiert:
Eine Union-ähnliche Klasse ist eine Union oder eine Klasse mit einer anonymen Union als direktes Mitglied. Eine Union-ähnliche Klasse X hat eine Reihe von Variantenmembern. Wenn X eine Union ist, sind die Variantenmitglieder die nicht statischen Datenmitglieder; Andernfalls sind seine Variantenmitglieder die nicht statischen Datenmitglieder von allen anonyme Gewerkschaften, die Mitglieder von X sind.
Mit anderen Worten, alle nicht statischen Datenelemente einer Union sind "variant members", und für eine Klasse mit anonymen Vereinigungen sind ihre nicht statischen Datenelemente "variant members" der Klasse.
>Der von Ihnen zitierte Kontext lautet 12.1 / 5. Wenn eine Union-ähnliche Klasse ein variantes Member mit einem nicht-trivialen Standardkonstruktor hat, wird der Standardkonstruktor der Klasse selbst gelöscht. Das Problem ist , welches variant member vom Standardkonstruktor der Klasse erstellt werden soll, und die Lösung soll keinen Standardkonstruktor haben. Wenn alle Variantenmitglieder triviale Standardkonstruktoren haben, gibt es kein Problem, da der Standardkonstruktor der Klasse, indem er nichts tut, alle / keine von ihnen gleich konstruiert.
boost::variant
ist eine separate Sache. Ich würde nicht zu überrascht sein, wenn "manche Seiten" "abweichende Mitglieder" sagen, wenn sie "die möglichen Typen, die ein gegebenes boost::variant
enthalten kann", das heißt die "Mitglieder" dieses variant
, bedeuten. Aber das ist nicht die Bedeutung, die im C ++ 11-Standard neu definiert wird.
Der Begriff variant wird normalerweise verwendet, um ein Element zu identifizieren, das einen Wert einer Menge verschiedener Typen enthalten kann. Ähnlich wie in union
in der Sprache ist der Begriff variant
normalerweise für Typen reserviert, die das sichere Speichern der verschiedenen Optionen ermöglichen.
Vielleicht möchten Sie die Dokumentation der Boost-Variantenbibliothek für ein solches Beispiel lesen, und wenn das das Konzept nicht auflöst, lassen Sie einen Kommentar fallen / erstellen Sie eine Frage mit Ihren Zweifeln.