Supponendo di voler archiviare oggetti che non ereditano una classe comune, il modo più semplice che viene in mente è utilizzare boost::any
.
Devi ancora essere sicuro di quale sia il tipo di ogni oggetto memorizzato in ciascun indice (ad esempio, per poter eseguire il corretto boost::any_cast
).
Si consiglia di farlo anziché memorizzare i puntatori su void
. Questo è il più vicino al modo semanticamente corretto di memorizzare "qualcosa che conosci il tipo ma il compilatore no", implicando un cast nel recuperare il valore.
Mentre sia (any
e un puntatore void
) funzionerà allo stesso modo (puntatore a parte), se si esegue il cast al tipo sbagliato, any
un'eccezione bad_any_cast
(IIRC), mentre con il puntatore void
, ti ottenere un comportamento indefinito. Una semplice prova su Coliru ha prodotto a segfault.
Hai provato a ottenere un puntatore da quel vettore? Come vuoi rilevare il tipo di cast di cui hai bisogno? - Rendi tutti gli elementi nel vettore ereditati da una classe base come "IObject". In quel caso conosci il tipo di vettore e il C++ ti permette di lanciare in sicurezza. – harper
Non è una buona idea. – Ajay
Sì, ma si richiede una matrice di shared_ptr <>. Una coppia è qualcosa di diverso e potrebbe essere utile. – harper