[C++] Nazwa obiektu przechowywanego w wektorze
Ostatnio zmodyfikowano 2014-11-24 19:28
michal98763 Temat założony przez niniejszego użytkownika |
[C++] Nazwa obiektu przechowywanego w wektorze » 2014-11-24 15:40:17 Witam serdecznie. W ramach projektu mam do zrealizowania klasę "Magazyn", która przechowuje obiekty z klasy "Deposit". Z klasy "Deposit" dziedziczą dwie inne klasy - "Fresh" i "Normal". Do przechowywania obiektów klasy "Deposit" (i obiektów klas pochodnych) w klasie "Magazyn" używam vectora ( a mianowicie vector < Deposit<T> > deposits; ). Nie wiem czy to jest ważne w tym przypadku, ale wszystkie klasy używają szablonu klas ( template <class T> ). I tu następuje moje pytanie - jak mogę uzyskać nazwę klasy, która znajduje się w tym wektorze "deposits" ? Bo za każdym razem po dodaniu do tego wektora obiektu typu "Normal" lub "Fresh" gdy użyję metody np: cout << typeid( deposits[ 0 ] ).name() to uzyskuję rezultat w stylu "7DepositISsE" zamiast oczekiwanego "6NormalISsE" czy "5FreshISsE". Próbowałem użyć dynamic_cast, ale nie mogłem uzyskać dobrych rezultatów (nie do końca wiem jak to użyć dokładnie), np: if( dynamic_cast < Normal < T >& >( deposits[ 0 ] ) ) cout << "Normal" << endl; else cout << "Fresh" << endl;
Wiem, że gdybym zamiast wektora użył tablicy obiektów "Deposits", np. Deposit** deposits, to nie mam problemów z uzyskaniem nazwy poprzez użycie metody typeid, jednak mimo wszystko wektor jest dużo wygodniejszy. Czy mógłby ktoś udzielić pomocy z tym zagadnieniem lub przynajmniej jakiejś rady? Pozdrawiam. |
|
Monika90 |
» 2014-11-24 19:28:44 std::vector<Deposit<T>> przechowuje obiekty klasy Deposit<T> i tylko takie, dodawanie do tego wektora obiektów klas pochodnych powoduje ich obcięcie. Potrzebujesz wektora wskaźników, najlepiej inteligentnych wskaźników: std::vector<std::unique_ptr<Deposit<T>>>
Do szablonu klasy Deposit<> musisz też dopisać wirtualny destruktor, a unique_ptr wymaga #include <memory> |
|
« 1 » |