Union vs. static_cast (void *)

Estou escrevendo código e até agora estava usando estruturas como esta:

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

Eu precisava de uma estrutura genérica para armazenar dados de diferentes classes e eu queria usá-los em std :: vector, por isso não posso usar modelos. Qual a melhor opção: uniões ou ponteiros nulos?

ponteiro @Void aloca apenas o espaço necessário, mas o c ++ é uma linguagem de tipo forte por algum motivo e a transmissão em todos os lugares em que preciso usar esses dados não é a maneira como o código c ++ deve ser projetado. Enquanto leio, ponteiros nulos não devem ser usados, a menos que não haja alternativ

ssa alternativa pode ser sindicatos. Eles vêm com c ++ e usam o mesmo espaço de memória para todos os membros, como os ponteiros nulos. No entanto, eles têm um preço - o espaço alocado é do tamanho do maior elemento em união e, no meu caso, as diferenças entre os tamanhos são grande

Este é um problema bastante estilístico e de "linguagem correta usando", pois as duas maneiras realizam o que eu preciso fazer, mas não consigo decidir se o código c ++ estilizado pode pagar por essa memória desperdiçada (mesmo que a memória hoje em dia não seja uma grande preocupação

questionAnswers(3)

yourAnswerToTheQuestion