Zakładając, że chcesz przechowywać obiekty, które nie dziedziczą wspólnej klasy, najprostszy sposób, jaki przychodzi Ci na myśl, to użycie boost::any
.
Nadal musisz być pewien, jaki jest typ każdego obiektu przechowywanego w każdym indeksie (tj. Aby móc wykonać poprawną boost::any_cast
).
Powinieneś to zrobić zamiast przechowywać wskaźniki do void
. Jest to najbliższy dostęp do semantycznie poprawnego sposobu przechowywania "czegoś, co znasz typ, ale kompilator nie", co oznacza rzutowanie podczas pobierania wartości.
Choć obie (any
i void
wskaźnik) będzie działać w ten sam sposób (wskaźnik na bok), jeśli oddanych do niewłaściwego typu, any
wygeneruje bad_any_cast
wyjątek (IIRC), natomiast ze wskaźnikiem void
, będziesz uzyskać niezdefiniowane zachowanie. Prosta próba na coliru przyniosła a segfault.
Czy próbowałeś pobrać wskaźnik z tego wektora? Jak chcesz wykreślić typ, którego będziesz potrzebować? - Uczyń wszystkie elementy w wektorze odziedziczonym po klasie bazowej, na przykład "IObject". W takim przypadku znasz typ wektora, a C++ pozwala ci bezpiecznie rzucać. – harper
Niezbyt dobry pomysł. – Ajay
Tak, ale pytasz o tablicę shared_ptr <>. Para jest czymś innym i może być przydatna. – harper