2009-06-20 17 views
7

Me gustaría generar una serie de objetos (en C++) en función de la cantidad/número que ingresa el usuario.¿Cómo generar nombres de objetos dinámicos de C++?

Ahora he oído en algún lugar que se debe hacer usando trucos de puntero, creando un puntero a una matriz del Tipo de objeto requerido, y luego aumentando dinámicamente el tamaño de la matriz (en tiempo de ejecución).

¿No hay una solución alternativa de usar directamente nombres como Object1, Object2 ..... ObjectX en lugar de haber Nombre de clase * Object [] y luego utilizando el índice de matriz para obtener el objeto?

En cualquier caso, sería genial si alguien pudiera aclarar sobre el tema.

Gracias!

+0

Es casi imposible determinar a qué se refiere la pregunta. ¿Estás hablando de un contenedor de longitud variable? –

+0

Ah. ¡Lo que dijo! –

Respuesta

6

Hasta el momento, nadie ha explicado por qué su pensamiento es defectuoso. C++ es un lenguaje compilado, y hace todo lo posible para convertir el programa fuente en un código de máquina eficiente. Por este motivo, los nombres que da variables están disponibles para el programa solo en tiempo de compilación, cuando lo convierte de un archivo ejecutable en un archivo ejecutable. Después, cuando desee crear objetos dinámicamente, ese tipo de información ya no estará disponible. El programa solo conoce las direcciones de la máquina donde se encuentran los operandos a las instrucciones de la máquina.

+0

Gracias por la explicación, exactamente lo que necesitaba (para entender). ¡Salud! –

8

Si desea una matriz de tamaño dinámico, utilice std :: vector. No podrá cambiar el tamaño de una matriz integrada. Si usted quiere ser capaz de obtener un objeto por nombre de cadena, entonces debería usar std :: mapa, que tiene un indexador:

std::map<string, Classname> myMap; 
myMap["Object1"] = Classname(); 
Classname newClassname = myMap["Object1"]; 
+0

+1 para compensar el voto negativo inexplicable: un mapa es un buen enfoque si desea tratar los objetos por nombre de cadena en lugar de por número. –

+0

Gracias por la idea con respecto a los mapas. Estoy seguro de que echaré un vistazo más profundo también. –

+0

Sé que esta es una publicación muy antigua, y probablemente no debería comentar sobre esto, pero no pude evitar darme cuenta de que en este ejemplo, todavía tiene que usar un nombre específico de objeto (newClassname). ¿Cuál es el sentido de usar mapas? ¿Es posible usar 'mapname [key]' como el objeto en sí, sin nombrarlo explícitamente, como este 'mapname [key] -> somefunc()' asumiendo que la declaración era 'std :: map mapname'? Estoy tratando de entender por qué el mapa es útil si una entrada de mapa no se puede utilizar como un nombre generado dinámicamente. –

3

No, no lo es. Además, no es necesario; use std::vector.

3

Cuando comencé a programar hace 9 años, me hice la misma pregunta. La respuesta es: no puedes.

De hecho, puede utilizar una matriz y cambiar su tamaño dinámicamente, sin embargo, usar un vector stl es mucho más fácil (una vez que aprende a usarlo).

+0

Hace 9 años dices :) eso me hace esperar un rato, jeje! realmente aprecio la respuesta! –

3

No se puede hacer eso porque C++ no tiene un "entorno" (reflection) donde pueden residir las variables (y los metadatos). Además, en C++ todos los nombres de variables son desaparecidos cuando se compila el código.

Una forma de lograr el efecto que desea es usar un Map donde las teclas son cadenas.

+0

Gracias de nuevo por la idea con los mapas.Estoy seguro de que echaré un vistazo. –

Cuestiones relacionadas