Sigo buscando, pero parece que no hay interés por parte de los desarrolladores de compiladores en apoyar esto.¿Es probable que algún compilador mainstream soporte C++ 0x unrestricted unions en el futuro cercano?
Para mí, parece extraño: básicamente, el C++ actual tiene restricciones sobre uniones que siempre fueron irritantes y nunca apropiadas. Uno pensaría que, básicamente, eliminar algunas comprobaciones de errores sería una forma relativamente simple de marcar una casilla adicional de soporte de C++ 0x, pero los desarrolladores de compiladores AFAICT todavía no lo han hecho.
Por qué estoy interesado es porque proporciona una solución simple a un problema recurrente en la codificación de la estructura de datos: cómo reservar memoria para una instancia de tipo desconocido (parámetro de plantilla), preferiblemente con tanta seguridad como sea posible en las circunstancias, pero sin invocar a ningún constructor que esté definido en ese tipo. El punto realmente importante es que se deben seguir las reglas de alineación.
Una unión no restringida es perfecta para esto: le da un tipo que no tiene constructores o destructores, pero que tiene el tamaño y la alineación correctos para permitir a cualquier miembro. Por supuesto, existen formas de construir y destruir explícitamente cuando sea necesario, y cuando necesite un acceso de tipo seguro, solo debe usar el miembro de la unión correspondiente para acceder a él. Apoyo a los sindicatos "adecuados" puede ser útil también, pero se obtiene enormes beneficios incluso para una unión de un solo miembro, como ...
union Memory_For_Item_t
{
Item_t m_Item;
};
Incluso con las características estandarizadas de manipulación de la alineación en C++ 0x, este enfoque gana por conveniencia y seguridad cuando, por ejemplo desea espacio para x elementos en un nodo, no todos los cuales estarán en uso (o construidos) en cualquier momento. Sin C++ 0x, todavía estamos en el tema de la alineación WRT de edades oscuras: cada compilador lo hace de forma no estándar.
El único problema con las uniones sin restricciones: no hay soporte para ellas que pueda encontrar.
Sí, tengo un enfoque de plantilla ahora, pero depende de los condicionales del preprocesador para identificar compiladores y otras maldades, principalmente para lograr el correcto alineamiento. IOW es frágil y generalmente desagradable, y cuanto antes pueda reemplazarlo, mejor. – Steve314
Hmmm - tabla iterante, pero de solo tres filas completamente en blanco, una solo tiene que ser para la característica que estoy esperando. Ah, bueno, las expresiones y cierres de lamda serán agradables, supongo. – Steve314