View Full Version : [C++] Collections
Ciao a tutti,
conosco le Collections di C#, adesso devo utilizzarle in un progetto C++. c'è qualcosa di simile? ho trovato le list ma non mi aiutano molto...
In sostanza voglio creare qualcosa di simil al loop di gioco di XNA (per chi lo conosce creo diverse classi tutte derivate dalla stessa, vengono istanziate e memorizzate in una collection e il loop di base richiama automaticamente i metodi principali tipo Initialize() Update() Draw() ecc...) però in C++ ma mi mancano le collections, e in più ho un altro dubbio: se la mia collection è di tipo <GameComponent> e i miei componenti sono derivati da questo tipo sono sicuro che richiama i metodi definiti nelle classi derivate e non solo in quella base?
Molto contorto, lo ammetto...
Grazie,
Zarko.
wizard1993
24-05-2009, 21:46
i contenitori della stl
Grazie, ma da quello che ho capito questi contenitori devono avere un solo tipo, io ho bisogno di inserire elementi di tipo diverso ma derivati dalla stessa classe... con le list sono riuscito a memorizzarli ma solo usando la classe base, inserisco oggetti derivati, ma quando richiamo i loro metodi prende quelli della classe base :cry:
Altre possibilità?
Grazie, ma da quello che ho capito questi contenitori devono avere un solo tipo, io ho bisogno di inserire elementi di tipo diverso ma derivati dalla stessa classe... con le list sono riuscito a memorizzarli ma solo usando la classe base, inserisco oggetti derivati, ma quando richiamo i loro metodi prende quelli della classe base :cry:
Altre possibilità?
temo proprio che questo non sia possibile :D
Sicuro che non stai facendo casino con l'inserimento?
Prova a fare una collection di puntatori invece che una collection di oggetti!
Collection di puntatori... tipo così?
class HUD : GameComponent
{
//...
};
class Model : GameComponent
{
//...
};
class Game
{
public:
HUD* m_pHUD;
Model* m_pModel
list<GameComponent*> GC; //list con la classe base
Game()
{
GC.push_back(m_pHUD);
GC.push_back(m_pModel);
}
void Initialize()
{
for (list<GameComponent*>::iterator i = GC.begin(); i != GC.end(); i++)
{
//??? Se qui voglio chiamare il metodo Initialize di ogni GameComponent cosa metto?
// Posso riconvertire un GameComponent in HUD, Model...
}
}
};
Grazie mille!
Zarko.
tomminno
25-05-2009, 13:25
void Initialize()
{
for (list<GameComponent*>::iterator i = GC.begin(); i != GC.end(); i++)
{
//??? Se qui voglio chiamare il metodo Initialize di ogni GameComponent cosa metto?
// Posso riconvertire un GameComponent in HUD, Model...
}
}
};
Grazie mille!
Zarko.
Se non hai fatto casini con le dichiarazioni delle classi non hai bisogno di riconvertire assolutamente niente, basta che richiami:
for (list<GameComponent*>::iterator i = GC.begin(); i != GC.end(); i++)
{
i->Initialize();
}
Comunque io userei shared_ptr invece dei puntatori
FUNZIONA!!!!
Se non hai fatto casini con le dichiarazioni delle classi non hai bisogno di riconvertire assolutamente niente, basta che richiami:
for (list<GameComponent*>::iterator i = GC.begin(); i != GC.end(); i++)
{
i->Initialize();
}
Comunque io userei shared_ptr invece dei puntatori
piccolo dettaglio:
(*i)->Initialize();
Comunque grazie mille a tutti!
Zarko.
vBulletin® v3.6.4, Copyright ©2000-2026, Jelsoft Enterprises Ltd.