Enviado em 28/11/2022 - 03:17h 
		Sei que o tópico já está marcado como resolvido, mas eu comecei a escrever uma resposta dias atrás, que acabei não enviando antes porque me faltou tempo de terminar.  Envio-a agora, na esperança de que possa ser útil.
Na medida do possível, seria bom evitar misturar uso muito frequente de objetos de tipos semelhantes, porém distintos e não-relacionados entre si, no mesmo programa.  Tem certeza de que não dá para preferir um tipo, em relação ao outro?  O que justificaria usar ambos ao mesmo tempo?
Solução perfeita na existe, então o que você teria de fazer dependeria de algumas perguntas, tais como:
  • É realmente necessário ter cada um dos tipos?
  • Para cada tipo, ele é usado integralmente e de modo significativo, ou apenas usam-se apenas alguns de seus membros espradicamente e isoladamente?
  • É simples e barato converter um tipo no outro?
  • Converter do 
tipo1  para o 
tipo2  é mais simples e barato do que converter do 
tipo2  para o 
tipo1 ?
  • Que informação importante seria perdida com as respectivas conversões de um tipo no outro?
  • Quão frequentemente teriam de ser feitas as conversões em cada sentido?
  • Operações que eventualmente usassem o valor convertido poderiam usar 
r-values , ou todas as conversões teria de ser explicitamente guardadas numa variável?
  • Após uma conversão de tipo, eu poderia executar várias operações antes de converter de volta, ou teria de converter de volta para o tipo original após cada operação com o tipo convertido?
  • Valeria a pena usar um dos tipos como classe base para um tipo derivado mais do que outro tipo (por exemplo: um deles tem mais funções virtuais do que outro, particularmente um destrutor virtual, permitindo melhor polimorfismo)?
  • Eventuais coleções de objetos poderiam ser polimórficas, ou usariam objetos concretos?
Não conheço nenhuma das bibliotecas que você mencionou, mas até para implementar a sugestão dada acima pelo Leandro, acima, seria interessante responder primeiro as questões acima.
Veja alguns esqueletos de solução, que podem ser mais ou menos adequados, a depender das respostas.
// Funções conversoras de tipos entre os tipos X e Y. 
// X facilita o polimorfismo, com funções virtuais que eu posso estender, então 
... Então Jesus afirmou de novo: “(...) eu vim para que tenham vida, e a tenham plenamente.” (João 10:7-10)