Programación General > C/C++

 Pregunta sobre listas

<< < (2/2)

m0skit0:

--- Cita de: "UnMandrango" ---Supongo que casteando el puntero void que me devuelve al objeto adecuado podría acceder a él, pero si tengo diferentes tipos de objetos, como saber que objeto me devuelve?
--- Fin de la cita ---
Eso ya depende de cómo lo implementes tú. Ten en cuenta que si la lista contiene todo tipo de objetos, tienes que poder distinguir cada cuál. Podrías usar un tipo enumerado con los objetos que vayas a guardar en la lista, y lo incluyes en el nodo de la lista. También puede ser una buena idea incluir el tamaño del dato del nodo.

Saludos

UnMandrango:
He estado dando vueltas al tema... y creo que no voy por el camino correcto.

Me voy a explicar, donde yo trabajo tienen un game engine propio, este tiene su propio lenguaje script y lo interpreta en tiempo de ejecución. Me he acostumbrado mucho a este lenguaje y me gustaría utilizar algunas características de él en C++/SDL para crear mis juegos. Y para empezar lo primero que necesitaría es tener un tipo de variable global: Todas las variables pueden ser enteros, flotantes, booleanos, cadenas o cualquier objeto. Es algo así como un tipo de variable puntero pero que puede apuntar a cualquier tipo u objeto y acceder a sus propiedades o métodos.

Luego están las listas, aquí puedo crear listas que contengan todo tipo de objetos diferentes, pero claro, realmente quizás todo es el mismo objeto "puntero global". Incluso la lista seria un puntero porque se pueden anidar. Así si seria fácil.

Yo no puedo acceder al código de ese motor para ver como esta hecho por dentro. Por eso pregunto, es posible crear algo así en C++?

Se puede guardar en una variable el typeid de un objeto para luego castear usando esta variable? Se puede castear punteros void a punteros objeto sin saber el tipo, solo su tamaño?

Gracias!  :hola:

•Parra:

--- Cita de: "UnMandrango" ---He estado dando vueltas al tema... y creo que no voy por el camino correcto.

Me voy a explicar, donde yo trabajo tienen un game engine propio, este tiene su propio lenguaje script y lo interpreta en tiempo de ejecución. Me he acostumbrado mucho a este lenguaje y me gustaría utilizar algunas características de él en C++/SDL para crear mis juegos. Y para empezar lo primero que necesitaría es tener un tipo de variable global: Todas las variables pueden ser enteros, flotantes, booleanos, cadenas o cualquier objeto. Es algo así como un tipo de variable puntero pero que puede apuntar a cualquier tipo u objeto y acceder a sus propiedades o métodos.

Luego están las listas, aquí puedo crear listas que contengan todo tipo de objetos diferentes, pero claro, realmente quizás todo es el mismo objeto "puntero global". Incluso la lista seria un puntero porque se pueden anidar. Así si seria fácil.

Yo no puedo acceder al código de ese motor para ver como esta hecho por dentro. Por eso pregunto, es posible crear algo así en C++?

Se puede guardar en una variable el typeid de un objeto para luego castear usando esta variable? Se puede castear punteros void a punteros objeto sin saber el tipo, solo su tamaño?

Gracias!  :hola:
--- Fin de la cita ---
Es que depende de lo que quieras hacer.. a ver, lo más practico y reutilizable que se me ocurre para un usuario, de hacer una lista para poder guardar diferentes tipos de variables, o estructuras dentro es esto:

(Codigo en C)

--- Código: C --- #define LIST_TYPE_INT      1#define LIST_TYPE_FLOAT 2#define LIST_TYPE_... struct Node{       int type; // tipo de datos       void * data; // datos}; #define LIST_MAX_SIZE 0xFF struct Node List[LIST_MAX_SIZE]; // Ahora, cuando quieras guardar algo en el array, puedes hacer funciones de este tipoint PutInt(int value){     // Busco un slot libre     int i;     for (i = 0; i < LIST_MAX_SIZE; i++)     {           if (List[i].Type == 0) // recuerda, que deberias de iniciar la lista..                  break;     }          // guardamos el int     // ...      // recuerda de asignar el type      return i; // devolvemos la dimension} // luego tendrias una funcion inversaint GetInt(int slot){      // retornarias los datos..}  
Lo bueno de usar una variable para indicar el type, es que luego podrias usar algo tipo "parser", y sacar los datos rapidamente.. De todos modos me imagino que con C++ podrás hacerlo mucho más facil y sencillo gracias a OOP, por ejemplo, usando templates, por ahi te vendrán de perlas.. pero a mi se me resiste un poco OOP :P

De todos modos.. creo que estás iendote por las ramas, cual es el sistema 'general' que quieres realizar?

Navegación

[0] Índice de Mensajes

[*] Página Anterior

Ir a la versión completa