Programación General > C/C++
Pregunta sobre listas
UnMandrango:
Una pregunta simple: ¿Es posible en C++ crear una clase Lista o Array que sea capaz de contener diferentes tipos de objetos o incluso anidar otras listas dentro?
Por mas que he buscado no he sacado nada en claro. Gracias!
UnMandrango:
:hitcomp:
budoky:
Es perfectamente posible crear una lista de los elementos que tu quieras, hay multiples formas de hacerlo, te recomiendo usar la libreria vector, en ella encontraras el template de la clase vector. Acabo de registrarme y no puedo publicar enlaces pero si buscas en google [libreria vector c++] o algo similar encontraras facilmente documentación sobre ella.
Un Saludo.
m0skit0:
Te la puedes montar tú mismo usando void*, malloc y free
Saludos.
UnMandrango:
Hola, gracias a ambos por responder. La clase vector no me sirve porque tengo que especificar el tipo, y lo que necesito es poder tener cualquier tipo y/o objetos en la misma lista.
Ya intente hacer mi propia clase con void* el problema esta a la hora de acceder a los elementos, voy a copiar el código, por ahora solo tengo dos métodos, para añadir y para acceder.
--- Código: C++ ---#ifndef LIST_H#define LIST_H class List{ public: int size; void ** nodes; List(); virtual ~List(); void * operator [] (unsigned int index); void Add(void * item); protected: private:}; List::List(){ size = 0; nodes = (void **)malloc(64*sizeof(void *));} List::~List(){ } void * List::operator [] (unsigned int index){ return nodes[index];} void List::Add(void *item){ nodes[size] = item; size++;} #endif // LIST_H
y aquí lo que intento desde el main:
--- Código: C++ ---#include <cstdlib>#include <cstdio> #include "List.h"#include "Service.h" using namespace std; int main(){ List lista; Service * serv = new Service; lista.Add(serv); lista[0]->Move(); return 0;}
El error:
error: ‘void*’ is not a pointer-to-object type
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?
Saludos!
Navegación
[#] Página Siguiente
Ir a la versión completa