Esiste comunque la possibilità di memorizzare statico: i vettori di puntatori di tutte le mie classi derivate nella mia classe base?

0

Al momento ho un programma che ha più classi derivate. Tutte le istanze di una classe derivata sono memorizzate all'interno del vettore statico di puntatori di quella classe. Ho anche un vettore statico di puntatori che si trova all'interno della classe base che memorizza qualsiasi oggetto che è stato derivato da esso. Ogni volta che aggiungo un oggetto, al momento ho due push back, uno per la classe derivata e uno per la classe base. Ciò significa che devo anche fare due cancellazioni quando voglio liberarmi di un oggetto. Posso comunque memorizzare i vettori statici di puntatori di tutte le mie classi derivate nella mia classe base? Continuo a pensare di usare un vettore 2D nella mia classe base, funzionerebbe?

class Derived_class : public Base_class
{
     static std::vector<Derived_class *> Lamps
}

class Derived_class2 : public Base_class
{
     static std::vector<Derived_class2 *> Tables
}

class Base_class
{
     static std::vector<Base_class *> Furniture
}

Scusa in anticipo per qualsiasi passo falso o se non fornisco informazioni sufficienti.

    
posta Manuel P. Rogers 13.09.2016 - 09:33
fonte

1 risposta

1

È possibile mantenere un contenitore associativo nella base, mappando qualcosa che rappresenta il tipo derivato a un elenco di istanze.

L'operatore typeid restituisce un riferimento std::type_info , che di per sé non è utilizzabile come chiave. std::type_index può essere costruito da std::type_info ed è adatto come chiave in un contenitore.

Il tuo codice sarebbe quindi simile a questo:

std::unordered_map<std::type_index, std::vector<Base_class*>> instances;
instances[std::type_index(typeid(*this))].push_back(this);

Come nota a margine, potresti valutare se un vettore è una struttura adatta o se desideri qualcosa con una ricerca / cancellazione più economica.

    
risposta data 13.09.2016 - 12:43
fonte

Leggi altre domande sui tag