PanCogito
#programowanie #cpp #pytanie

Czy mogę tak przeładować w c++ jakiś operator żeby wynik działania działał na obydwa argumenty a nie dawał wyniku końcowego?
Przykładowo chciałbym mieć klasę MyClass z przeładowanym operatorem (np "||" ) w taki sposób że jak wykonuje działanie z tym operatorem na dwóch obiektach A i B tej klasy to zmienia mi się właściwość obiektu A i obiektu B ale żadnego wyniku nie otrzymuje. Chodzi mi o to żebym za pomocą operatora łatwo wiązał obiekty w "łańcuchy" (1D) albo "siatki".(2D)
  • Najlepsze
  • Wszystkie komentarze
user84328
user84328
@PanCogito: Od Ciebie zależy jak przeciążysz operator, ale jedna z dobrych praktyk mówi że przeciążone operatory powinny być intuicyjne. możesz przeciążyć '||' np. tak:

struct MyClass{
int x;
void operator ||(MyClass& rhs){
this->x = rhs.x
k.....r
k.....r
@PanCogito: najlepiej przeciąż sobie operator<< albo operator|. Popatrz sobie jak to jest zrobione dla streamów (<<), albo | w range'ach Erica Nieblera.
https://github.com/ericniebler/range-v3
user84328
user84328
@PanCogito: Functional reactive programming, observer pattern
Nie będę teraz tłumaczył tych haseł, bo zrobiłbym inaczej: najepierw przeliczał logikę, a odrysowywałbym wszystko, niezależnie od tego czy stan obiektu się zmienił czy nie.
user84328
user84328
@PanCogito: nie opłaca się liczyć na cpu który region ekranu się zmienił, bo gpu i tak nic nie robi.
Dla gpu to czy odrysujesz 1/4, czy 1/2 ekrany czy cały ekran nie praktycznie znaczenia. Po co grzać cpu jak gpu śpi?
Oczywiście biblioteka której używasz musi rysować przy użyciu gpu. Stary SDL na przykład rysował tylko i wyłącznie na cpu i tam faktycznie mogło opłacać się sprawdzać co się zmieniło.
inflo
@PanCogito: sprawdź czy takie rozwiązanie ci odpowiada: https://ideone.com/yDrntg
PanCogito
PanCogito Autor
0
@kuhar: @inflo: Troszkę mnie zaciemniło i myślałem że działania z operatorem zawsze musi coś zwracać ale widzę, że nie (jestem w trakcie nauki c++)
@user84328: Chcę przeciążyć operatory "|" "-" tzn:
A | B - będzie oznaczało że tworze połączenie pomiędzy obiektem A i B gdzie A jest na górze a B na dole
A - B - analogicznie tylko połączenie będzie lewo prawo.
Myślę że
PanCogito
PanCogito Autor
0
@kuhar: @inflo: @user84328: Jeszcze skorzystam z sytuacji i pozwolę sobie zapytać was następującą rzecz
( ͡° ͜ʖ ͡°)
Chcę sobie napisać jakąś prostą grę 2D. Wizualnie będzie to jakaś plansza 2D składająca się z elementów.
Chciałbym całkowicie rozdzielić mechanikę gry od grafiki.
W mechanice gry będę miał obiekty który będą właśnie reprezentowały elementy na planszy 2d (elementy te oraz jakieś klasy zarządzające tymi elementami będą implementowały tylko logikę
PanCogito
PanCogito Autor
0
@user84328: ale takie rozwiązanie chyba nie jest wydajne, jeżeli pomiędzy kolejnymi "krokami" gry zmienia się tylko parę elementów a tak czy siak grafika jest cała rysowana?
Rozumiem że w takich prostych gierkach nie ma to znaczenie ale czy ogólnie tak się robi?
PanCogito
PanCogito Autor
0
@user84328: ok, to wiele wyjaśnia. No faktycznie jakoś nie pomyślałem że przecież od rysowania jest karta graficzna. W takim wypadku temat znacznie się upraszcza (mam zamiar korzystać właśnie z SDL 2.0).
Dzięki za pomoc!