Parece como si tuviera un malentendido fundamental sobre C++: <C++ alternativas para anular * punteros (que no es plantillas)
me gusta la solución de contenedores polimórficos. Muchas gracias, por traer a mi atención que :)
Por lo tanto, tenemos la necesidad de crear un objeto de tipo contenedor relativamente genérico. También sucede que encapsula una lógica relacionada con el negocio. Sin embargo, necesitamos almacenar datos esencialmente arbitrarios en este contenedor, desde tipos de datos primitivos hasta clases complejas.
Por lo tanto, uno inmediatamente salta a la idea de una clase de plantilla y se hace con ella. Sin embargo, he notado que el polimorfismo C++ y las plantillas no funcionan bien juntas. Siendo que hay una lógica compleja que vamos a tener que trabajar, preferiría limitarme a las plantillas O al polimorfismo, y no tratar de luchar contra C++ haciendo que haga ambas cosas.
Finalmente, dado que quiero hacer una u otra, preferiría el polimorfismo. Me resulta mucho más fácil representar restricciones como "este contenedor contiene tipos comparables" - a la java.
Acercandome al tema de la pregunta: En términos abstractos, imagino que podría tener una interfaz virtual pura de "Contenedor" que tiene algo parecido a "datos push (void *) y pop (void *)" (para el registro, en realidad no estoy tratando de implementar una pila).
Sin embargo, realmente no me gusta el vacío * en el nivel superior, sin mencionar que la firma va a cambiar cada vez que quiero agregar una restricción al tipo de datos con los que puede trabajar un contenedor concreto.
Resumiendo: Tenemos contenedores relativamente complejos que tienen varias formas de recuperar elementos. Queremos ser capaces de variar las restricciones sobre los elementos que pueden entrar en los contenedores. Los elementos deberían funcionar con múltiples tipos de contenedores (siempre que cumplan con las restricciones de ese contenedor en particular).
Editar: También debo mencionar que los contenedores deben ser polimórficos. Esa es mi razón principal para no querer utilizar C++ con plantilla.
Entonces, ¿debería abandonar mi amor por las interfaces tipo Java e ir con plantillas? ¿Debería usar void * y lanzar todo de forma estática? ¿O debería ir con una definición de clase vacía "Elemento" que no declara nada y usar eso como mi clase de nivel superior en la jerarquía "Elemento"?
Una de las razones por las que amo el desbordamiento de la pila es que muchas de las respuestas brindan una perspectiva interesante sobre otros enfoques que ni siquiera había considerado. Así que gracias de antemano por sus ideas y comentarios.
¿qué quiere decir "polimorfismo y plantillas no funcionan bien juntas"? –
Específicamente, un contenedor polimórfico: olvidé mencionar ese requisito. Hasta donde yo sé, no se puede hacer ... pero entonces, ¿qué sé? – Voltaire
> Tengo una necesidad de que los contenedores sean polimórficos. Actualicé mi respuesta en consecuencia. – Lev