Kopiowanie dynamicznie zaalokowanego pointera wskazującego na klase dziedziczącą

0

Mam klase Base, i klase Derived : Base, mam załóżmy pointer typu Base*, ale zaalokowany Derived:

Base* ptr = new Derived();

Jak mogę najprościej i najlepiej zaalokować znowu Derived na drugim pointerze

Base* ptr2 = .... 

ale na podstawie kopii *ptr, i tak, bym w przypadku drugiego ptr2 nie musiał podawać stricte typu? Czy da się to zrobić za pomocą typeid?

3

Robisz abstrakcyjną funkcję clone w Base i potem implementujesz ją w klasach pochodnych.

Tutaj poczytaj: https://isocpp.org/wiki/faq/virtual-functions#virtual-ctors

0

Takie rozwiązanie... do końca mnie nie satysfakcjonuje. Tzn mógłbym zaimplementować 20-100 funkcji clone w 20-100 klasach pochodnych w mojej aplikacji... Może coś z C++11 lub boosta rodem?

3

Rodem z c++ nie miałbyś potrzeby definiowania 100 klas pochodnych i dla nich wszystkich klonowania. Może źle zabrałeś sie za problem?

0

Piszę gre kosmiczną. Postanowiłem trochę zmienić taktykę podejścia do tego problemu, bo szczerze mówiąc to co zrobiłem, może zadziałać, ale takie rozwiązanie nie miało by większego sensu, i było by bardzo sztywne. Na samym początku pomyślałem, by każda klasa dziedzicząca była tą klasą, która implementuje dodatkowe zachowania dla obiektów w grze. Każdy nowy rodzaj statku, każdy nowy rodzaj budynku, każdy nowy rodzaj asteroidy itp... = +1 klasa implementująca dodatkowe zachowanie dla tego obiektu. Za dużo pisania w C++, bo tych obiektów jest dość sporo... i będzie więcej... postanowiłem więc zamiast robić takiej sieczki to po prostu wydzielić poszczególne moduły(moduł z wieżyczkami dla budynków, moduł renderowania jakiś tam dodatkowych efektów... takie tam) dla tych obiektów w grze na klasy, i informacje na temat tego jaki obiekt gry ma prawo z jakich modułów korzystać przenieść do pliku konfiguracyjnego z którego będzie można już tak jakby modować obiekty.

Więc dla mnie ten temat jest już tak jakby zamknięty, bo zrezygnowałem z tego kiepskiego modelu. Wiem, że może słabo to wytłumaczyłem, ale w każdym razie sobie już poradziłem.

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