"miembro Variante" se define en 9,5/8 de C++ 11:
Una clase unión-como es una unión o una clase que tiene una unión anónima como miembro directo. Una clase X de tipo sindical tiene un conjunto de miembros variantes. Si X es una unión, sus miembros variantes son los miembros de datos no estáticos; de lo contrario, sus miembros variante son los miembros de datos no estáticos de todos los sindicatos anónimos que son miembros de X.
En otras palabras, todos los miembros de datos no estáticos de una unión son "miembros variantes", y para una clase que contiene uniones anónimas, sus miembros de datos no estáticos son "miembros variantes" de la clase.
El contexto que citó es 12.1/5, indicando que si una clase similar a un sindicato tiene un miembro de variante con un constructor predeterminado no trivial, entonces se elimina el constructor predeterminado de la clase. El problema es cuyo miembro de variante debe ser construido por el constructor predeterminado de la clase, y la solución no es tener un constructor predeterminado. Si todos los miembros de la variante tienen constructores triviales predeterminados, no hay problema, ya que al no hacer nada, el constructor predeterminado de la clase está construyendo todos/ninguno de ellos por igual.
boost::variant
es algo separado. No me sorprendería mucho si "algunos sitios" dicen "miembros variantes" cuando significan "los posibles tipos que puede contener un determinado boost::variant
", es decir, los "miembros" de ese variant
. Pero ese no es el significado recién definido en el estándar C++ 11.
¿Puedes publicar un enlace a uno de estos sitios? – Praetorian
Stack Overflow en sí es uno de ellos. – BlackVegetable
¿Estás hablando de 'boost :: variant' o algo así? Tradicionalmente, una variante es una unión que contiene todos los tipos soportados. – chris