¿Hay algún problema con una unión que tenga uno o más métodos? O algo por lo que tener cuidado? (Puedo ver que los constructores/destructores son problemáticos por razones esquizofrénicas)C++: ¿uniones con métodos?
Respuesta
De los (N3092) Proyecto de normas C++ 03 ++ 0x & C:
9.5 Uniones
Una unión puede tener funciones miembro (incluyendo constructores y destructores), pero no funciones virtuales (10.3). Una unión no deberá tener clases base. No se utilizará una unión como clase base.
La inicialización de la unión utilizando la sintaxis de inicializador agregado (U u = { 42 };
) o la creación de un miembro después (U u; u.i = 42;
) no es "problemático". Y tampoco lo está inicializando usando un constructor (U u(42);
).
El único "inconveniente" es que no puede usar la sintaxis agregada del inicializador para una unión que tenga un constructor definido por el usuario.
es nuevo para C++ 0x, o ha sido parte del estándar C++? –
@Jim: esa parte no ha cambiado. –
sindicatos pueden tener constructores? entonces cuando es/no es la construcción un problema? –
¿Cómo podría implementar tal cosa? Aquí hay un indicador de una unión, espero que no te importe que no tengas idea de qué variables son seguras y cuáles no.
Las uniones son en realidad una función de lenguaje mudo: han sido totalmente reemplazadas por métodos basados en bibliotecas como boost :: variant o boost :: any. Algo así como el vacío * y las macros funcionales: rara vez son útiles en C++ en comparación con otras opciones.
No te olvides del mundo integrado. A veces las cosas no son 100% seguras. –
@Jason: ¿Cómo cambia el contenido? O sabes de qué tipo es, así que usa una variable regular, sabes que todos los tipos están relacionados, así que usa el polimorfismo, o necesitas saber qué tipo es antes de poder hacer algo. – Puppy
Incrustado no cambia nada sobre el lenguaje per se, pero sí impone límites en la asignación de memoria dinámica y el polimorfismo (y gran parte de la potenciación está activada) que lo predispone hacia otras técnicas. La mayoría de las veces es una unión entre dos # de 16 bits y un # de 32 bits, o una unión entre un # de 16 o 32 bits y una estructura con campos de bits. En esos casos, ambos miembros de la unión tienen contenidos igualmente válidos; son ambos tipos. –
- 1. Métodos de visualización de uniones
- 2. Codeigniter eliminando datos con tablas de uniones
- 3. Paginación precisa con uniones hacia la izquierda
- 4. Uniones múltiples en Codeigniter
- 5. Llaves foráneas vs Uniones
- 6. Comparando Uniones Discriminadas
- 7. ¿Entiendo mal las uniones?
- 8. Uniones LINQ - Rendimiento
- 9. Clonación clase C++ con métodos virtuales puros
- 10. Usar uniones para simplificar moldes
- 11. Uniones múltiples Postgres
- 12. C# detectar uniones de carpetas en una ruta
- 13. Dos uniones internas MYSQL
- 14. Uniones condicionales en LINQ
- 15. F #, serializando uniones discriminadas con valores que carecen de datos
- 16. ¿Qué son las Uniones no restringidas propuestas en C++ 11?
- 17. Linq a entidades: Uniones + Distintas
- 18. C#: Métodos de empaquetado en otros métodos
- 19. métodos "protegidos" en C#?
- 20. Consulta dos tablas relacionadas (Uniones)
- 21. Métodos de anulación C++
- 22. No se puede obtener la consulta de C# linq para compilar con las uniones
- 23. Emacs en uniones de teclado TTY +
- 24. SQL - ¿Diferencia entre estas uniones?
- 25. métodos const en C#
- 26. C# RealProxy: métodos genéricos?
- 27. métodos virtuales puros C++
- 28. C#: ¿Firmas de métodos?
- 29. Agregar campos constantes a uniones discriminadas F #
- 30. Mejorando el rendimiento en una vista con MUCHAS uniones
No veo nada malo en ellos excepto lo que mencionaste sobre los destructores y la memoria de liberación. – Jim
Esto es exactamente por lo que no puede tener miembros de unión de un tipo de clase/estructura que tenga un constructor, un destructor o un operador de asignación no triviales. –