Union vs. static_cast (void *)

Estoy escribiendo código y hasta ahora estaba usando estructuras como esta:

struct s{
  enum Types { zero = 0, one, two };
  unsigned int type;
  void* data;
} 

Necesitaba una estructura genérica para almacenar datos de diferentes clases y quería usarla en std :: vector, por eso no puedo usar plantillas. ¿Qué mejor opción: sindicatos o punteros vacíos?

l puntero @Void asigna solo el espacio que necesito, pero c ++ es un lenguaje de tipo fuerte por alguna razón y la conversión a todas partes donde necesito usar esos datos no es la forma en que se debe diseñar el código de c ++. Mientras leo, los punteros vacíos no deben usarse a menos que no haya otra alternativa.

Esa alternativa podría ser Uniones. Vienen con c ++ y utilizan el mismo espacio de memoria para cada miembro, muy parecido a los punteros nulos. Sin embargo, tienen un precio: el espacio asignado es el tamaño del elemento más grande en la unión, y en mi caso las diferencias entre tamaños son grandes.

Este es un problema bastante estilístico y de "uso correcto del lenguaje", ya que ambas maneras logran lo que necesito hacer, pero no puedo decidir si un código c ++ bien estilizado puede pagar esa memoria desperdiciada (aunque la memoria en estos días no es un problema) gran preocupación).

Respuestas a la pregunta(3)

Su respuesta a la pregunta