Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

[C++] Nazwa obiektu przechowywanego w wektorze

Ostatnio zmodyfikowano 2014-11-24 19:28
Autor Wiadomość
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:

C/C++
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.
P-121277
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>
P-121300
« 1 »
  Strona 1 z 1