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

Problem z zapamiętaniem ściganego obiektu przez inny obiekt

Ostatnio zmodyfikowano 2015-07-29 22:37
Autor Wiadomość
Nekronomik
Temat założony przez niniejszego użytkownika
Problem z zapamiętaniem ściganego obiektu przez inny obiekt
» 2015-07-28 21:20:29
Witam, zapamiętanie obiektu przez obiekt nie stanowi tak naprawdę problemu np obiekt[10]; atakuje obiekt [1];. Wystarczy ze obiekt[10] zapamięta numer tablicy obiektu atakowanego obiekt[1]; czyli "1". Problem się pojawia gdy dodaję funkcje odpowiadającą za segregowanie obiektów. Czyli jeśli obiekt[0] zginie to obiekt[1] zastępuje obiekt[0] a obiekt[10] zastępuje obiekt[9]. problem już się pojawił bo teraz obiekt[9] (po segregacji) atakuje obiekt[1] co jest błędem bo to jest inny już obiekt, nawet sam obiekt[0] nie wiedział by przed czym uciekać (albo by uciekał przed innym obiektem)> można by zrobić aby każdy obiekt miał indywidualny id i dzięki temu się szukał lecz trzeba wtedy zrobić pętle w pętli i każdy obiekt przemielić z innym obiektem co jest mało wydajne przy setkach obiektów może ma ktoś pomysł jak to rozwiązać ?
Chyba że jest inny sposób na zapamiętywanie obiektu przez obiekt niż to co ja sobie wymyśliłem.
P-135366
pekfos
» 2015-07-28 21:24:18
Nadaj obiektom identyfikatory.
P-135368
Kaikso
» 2015-07-29 00:08:13
Zamiast identyfikatorów użyj wskaźników.
P-135374
pekfos
» 2015-07-29 13:42:33
Zamiast identyfikatorów użyj wskaźników.
Zamiast wskaźników użyj identyfikatorów. Same wskaźniki są jeszcze gorsze od zapamiętywania indeksów. Ale jeśli już musisz iść w adresy, to w tablicy trzymaj wskaźniki shared_ptr<>, a w obiektach zapamiętuj adres w weak_ptr<>.
P-135383
Nekronomik
Temat założony przez niniejszego użytkownika
» 2015-07-29 17:39:51
Nie bardzo rozumiem o co chodzi z tymi identyfikatorami.
P-135406
pekfos
» 2015-07-29 19:30:31
Dodaj do obiektu pole z liczbowym identyfikatorem. Dopisz jakiś generator, by każdy tworzony obiekt dostawał unikatowe id (choćby i return ++lastId;). Skoro masz interakcje pomiędzy obiektami, to masz jakiś obiekt nadrzędny dla wszystkich innych. Dodaj do niego (obok, lub zamiast tablicy obiektów) mapę, kojarzącą id z adresami obiektów (wtedy trzeba alokować dynamicznie i można użyć zwykłych wskaźników, lub unique_ptr<>). Zapamiętujesz id, a obiekt nadrzędny podaje ci element o tym id.
Możesz też użyć rozwiązania z shared_ptr<> i weak_ptr<>. Adres zaalokowanego dynamicznie obiektu też jest swego rodzaju unikalnym identyfikatorem, który ma tę zaletę, że od razu można się przez niego odwołać do wskazywanego obiektu (co nie zawsze jest pożądane).
P-135408
Kaikso
» 2015-07-29 22:02:14
A nie łatwiej użyć tablicy asocjacyjnej z kluczem typu int, jak np.
std::map < int, TwojaKlasa * >
?
P-135418
pekfos
» 2015-07-29 22:37:30
A nie łatwiej użyć tablicy asocjacyjnej z kluczem typu int, jak np.
std::map < int, TwojaKlasa * >
?
Łatwiej, niż co?
Dodaj do niego (obok, lub zamiast tablicy obiektów) mapę, kojarzącą id z adresami obiektów
P-135420
« 1 »
  Strona 1 z 1