Dawno dawno temu uczyłem się c++ i próbowałem robić gry. Mówię sobie wrócę do tego.

Po trzech godzinach walki z środowiskiem, kompilatorem, źródłami i wgl wszystkim innym przypomniało mi się dlaczego nigdy żadnej gry nie zrobiłem ;)

#cpp #programowanie
  • 3
  • Odpowiedz
  • Otrzymuj powiadomienia
    o nowych komentarzach

@ulath: Popracuj nad formatowaniem, zwykle edytory mają funkcję automatycznego formatowania. Wyeliminuj duplikujący się kod poprzez użycie funkcji. Podziel kod na dużo mniejsze funkcje - to jest ok, nawet jeśli używasz funkcji tylko w jednym miejscu. Zamiast drabinki ifów "if(choice == "ssak").." możesz użyć mapy. Funkcja zmienParametry do wywalenia, nie wiem po co jej używasz, skoro i tak masz bezpośredni dostęp do zmiennych składowych klasy zwierze. Nie używaj nazw typu a,
  • Odpowiedz
@ulath: Możesz się już zainteresować czym są słowniki w programowaniu. To takie struktury, które służą do szybkiego wyszukiwania obiektów. Szybszego niż wkładanie obiektów do tablicy i sortowanie jej. Takie struktury w C++ noszą nazwę set,unorderedset, map, unorderedmap. Wtedy po prostu przy tworzeniu obiektu wkładasz do takiej struktury, a w odpowiednim momencie wyciągasz z niej, jeśli klucz istnieje. Być może uda ci się to zaimplementować
  • Odpowiedz
@Gerax9:

Co z konstrukcjami typu std::vector<std::sharedptr<T>> ?

Zależy od przypadku użycia. Na przykład, jeżeli jesteś w stanie zagwarantować, że obiekty w wektorze "przeżyją" ten wektor, to co jest złego w surowych wskaźnikach? Przez właśnie taką paranoję powstają dziwactwa jak std::observer_ptr ( ͡° ͜ʖ ͡°)
I prawdopodobnie takie powinno być jedyne znaczenie surowych wskaźników we współczesnym C++ - odniesienie do obiektu, którego nie jesteśmy właścicielem.
  • Odpowiedz
Firma ma budżet na szkolenia. Nie wiem skąd ten nacisk, ale koniecznie przy wyborze musimy się kierować tym, żeby było stacjonarnie.

Jaka firmę/osobę możecie polecić do przeprowadzenia takiego kursu?

Działamy w #embedded i w głosowaniu wygrywa szkolenie z #cpp #c++ . Nie zamykamy się na inne tematy, ale Cpp must have.

#programowanie #naukaprogramowania #krakow
  • 12
  • Odpowiedz
  • Otrzymuj powiadomienia
    o nowych komentarzach

#c++ #cpp #informatyka #programowanie

Działam z klasami w C++. Jest klasa ryba i ptak, co dziedziczą po klasie zwierze.
Jest też klasa ptakoryb co dziedziczy po ptaku i rybie ale mam problem z dostaniem się do metody jedz() która jest zdefiniowana w klasie zwierze.

class Zwierze
  • 9
  • Odpowiedz
  • Otrzymuj powiadomienia
    o nowych komentarzach

Jak piszesz class ptakoryb : public Ryba, public Ptak to robisz stwora który ma i pysk ryby i dziób ptasi (a bardziej technicznie - masz dwie kopie cech zwierzęcych w ptakorybie - jedne od ryby a drugie od ptaka). Inaczej je się pyskiem ryby a inaczzej dziobem. Kompilator nie wie którym z nich chcesz coś zjeść. Masz dwa wyjścia:
- możesz powiedzieć kompilatorowi (explicit) - zjedz dziobem poprzez pr.Ptak::jedz()
- albo możesz
  • Odpowiedz
Sprawdzam projekt cppcheckiem i dostałem wskazówkę, żeby pętlę zamienić na std::transform.
Napisałem sobie test, żeby zobaczyć jak będzie zachowywał się obiekt po takiej zmianie i widzę, że przy każdym obiekcie wywoływany jest konstruktor przenoszący. Robię coś źle, czy po prostu std::transform w takim prostym przypadku wykorzystuje więcej zasobów od pętli?

Co byście użyli w takiej sytuacji?
https://godbolt.org/z/7fMbPabEo

#cpp
  • 7
  • Odpowiedz
  • Otrzymuj powiadomienia
    o nowych komentarzach

@Gerax9: lambda by default zwraca przez wartość, zatem zwracasz w tej lambdzie kopię. dorzuć tam ->decltype(auto) w lambdzie, to będzie referencję zwracać i nie będzie przenoszenia
  • Odpowiedz
@Gerax9: jednakże w korzystając z transforma chcemy tak naprawę tworzyć nowe obiekty(czyli zwracać przez wartość(rvo) i przenosić), a nie zwracać referencje do istniejących, więc zastanów się co tak naprawdę chcesz zrobić. chyba, że zwracasz referencję do membera, to ok
  • Odpowiedz
@noway321: wrzucac, wrzucac co sie da i ile sie da technologii wylistowac.. nawet takie pierdy jak HTML, XML.. wszystko jak leci.. edytory jakich uzywales.. wszystko
  • Odpowiedz
wrzucac co sie da i ile sie da technologii wylistowac.. nawet takie pierdy jak HTML, XML.. wszystko jak leci.. edytory jakich uzywales.. wszystko


@6a6b6c:pierdyliard technologii, których nawet nie znasz ale widziałeś raz na oczy, jak u hindusa, co za bezsens
  • Odpowiedz
Mam vector w którym są sharedpointery

std::vector<shared
ptr<Object>> tab;

i teraz chcę wyszukać obiekt po jednym z jego
  • 3
  • Odpowiedz
  • Otrzymuj powiadomienia
    o nowych komentarzach

@Gerax9: możesz stworzyć też stworzyć (generyczny) adapter, który będzie przyjmował funktor akceptujący T, a który będzie zwracał funktor akceptujący U, gdzie dereferencja U będzie dawać T. wtedy będzie można użyć tego mniej więcej tak

std::find_if(tab.begin(), tab.end(), withDeref([](const Object& obj){return obj.atr == 3;}));
przykładowy jednolinijkowy adapter w c++17(ofc można dorzucić tam perfect forwarding, ale to troche skomplikowane przy capture)

constexpr auto withDeref = [](auto& functor){return [functor](const auto& dereferencable){return
  • Odpowiedz
@Ernest_: ta, jasne, "how to fix it" i jak zastosujesz, zwłaszcza jak robisz jakiś stan współdzielony, to masz teraz w prezencie inny error lub nawet całą ich grupę do poprawienia. ( ͡° ͜ʖ ͡°)

Zresztą, gdyby to było takie fajne, to SO, forum rusta i reddit powinno mieć mało postów proszących o wyjaśnienie tych błędów, a takich wpisów i pytań jest cała masa, nawet teraz, kiedy
  • Odpowiedz