Mapa obiektów dowolnego typu

0

Witam.

Czy w C++ można stworzyć taką mapę(std::map), żeby jej właściwy element był dowolnego typu?
Czy są jakieś mechanizmu dzięki którym będę mógł sprawdzić jaki to typ przechowuje mapa pod danym kluczem?

0

Jesli masz klase bazowa "a" i jakies klasy wywodzace sie od klasy "a". To mozesz zrobic tak:
std::map<int, a*> mapka;
Wtedy bedziesz mogl przechowywac obiekty typow wywodzacych sie od klasy "a".
Jesli chcialbys przechowywac w pojemniku mapa dowolny typ obiektow to bys musial zaimplementowac jakis "god" obiekt ktory moze przechowywac wszystkie mozliwe obiekty. I ten "god" object przechowywac w klasie map

0

@0xFF na 99% NIE POWINIENEŚ tak robić i jeśli faktycznie potrzebujesz to znaczy że rozwiązanie które wymyśliłeś jest złe.

0

Stworzyc mozna, ale nie jest to jedno z trywialniejszych zadan.

0

W mapach chcę przechowywać zmienne określające pewną animację. Jest ich dość dużo, większość to moje klasy. Używać tych map będę dwa razy: raz przy wczytywaniu z pliku wartości danej zmiennej, drugi raz przy renderowaniu. Zapisanie wczytywania z pliku jest bardzo czasochłonne i obszerne, dlatego postanowiłem trzymać zmienne w mapach. Aktualnie mam kilka map na różne typy. Wczytywana jest nazwa z pliku, zaraz po niej wartość która jest zapisana do mapy z kluczem wcześniej wczytam. Możliwe nazwy trzymam w odpowiednich listach, dlatego wiem do której mapy co zapisać. Pomyślałem że wygodniej by było to jeszcze bardziej zmechanizować.

Zdecydowałem się na to, bo uciążliwe było wczytywanie wartości z pliku dla tylu zmiennych. if&else * n to masakra w kodzie była. Do tego trzeba doliczyć, że całość będzie dziedziczona a głębiej może być jeszcze więcej zmiennych do wczytywania.

Były by może jakieś uwagi do tego?

0

Najlepsze rozwiazanie przedstawil Robcio.
czyt. polimorfizm
Edit:
Wtedy sprawdzanie typow by bylo RTTI czyli typeid czy cos w tym guscie.

0

@OxFF na moje oko to zwyczajnie źle to napisałeś i tyle. Mnie sie wydaje że ta animacja spokojnie mogłaby być zrealizowana jako Composite a nawet jeśli nie to z pomocą wzorca Strategy.

1 użytkowników online, w tym zalogowanych: 0, gości: 1