• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Szablony czy tak mozna?

Cloud VPS
0 głosów
727 wizyt
pytanie zadane 8 października 2018 w C i C++ przez Poczprogramista123 Bywalec (2,900 p.)

Poprostu czy tak mozna.Chyba nie bo jak wywolam szablon dla inta to takie cos jest nieporzadane. Dodam ze pierwszy raz mam stycznosc z szablonami wiec niewiem ale to jak ma w takim razie  wygladac praca na obiektach w takiej funkcji.


template <typename T>
bool Sprawdz(T &Postac)

{

if(Postac.czy_prawda)
return true;

}

 

komentarz 8 października 2018 przez Hiskiel Pasjonat (22,830 p.)
Jaki jest sens tego kodu?
komentarz 8 października 2018 przez Poczprogramista123 Bywalec (2,900 p.)
edycja 8 października 2018 przez Poczprogramista123
Jezu chodzi o istote ale jak ci taj zalezy. Chce zrobic szablon ktory bd sprawdzal czy obiekt (wszelaki Postac,Przeszkoda) Jest widoczny w oknie. Kazdy taki obiekt ma swoja pozycje.

1 odpowiedź

0 głosów
odpowiedź 8 października 2018 przez adrian17 Mentor (354,120 p.)
wybrane 8 października 2018 przez draghan
 
Najlepsza

Chyba nie bo jak wywolam szablon dla inta to takie cos jest nieporzadane

To proste - jeśli obiekt typu T ma pole `czy_prawda`, to szablon się skompiluje. Jeśli nie ma go (np T to int), to nie zadziała.

(inna sprawa, że ta funkcja nie zwraca wartości na każdej ścieżce. No i czy ogólnie ma sens :) )

komentarz 8 października 2018 przez Poczprogramista123 Bywalec (2,900 p.)
Chce zrobic szablon ktory bd sprawdzal czy obiekt (wszelaki Postac,Przeszkoda) Jest widoczny w oknie. Kazdy taki obiekt ma swoja pozycje.
komentarz 8 października 2018 przez Poczprogramista123 Bywalec (2,900 p.)
thx za odpowiedz
komentarz 8 października 2018 przez adrian17 Mentor (354,120 p.)
OK... tylko zastanów się, czy aby w tym przypadku lepszym rozwiązaniem nie byłoby dziedziczenie.
komentarz 8 października 2018 przez Poczprogramista123 Bywalec (2,900 p.)
No ok ale i tak to sie wiaze z kilkukrotnym pisaniem tego samego. Pomijajac ze Mam pare klasa bazowych (Postac,Przeszkody,Przedmioty)
komentarz 8 października 2018 przez adrian17 Mentor (354,120 p.)

Po to właśnie jest dziedziczenie, żeby nie pisać kilkukrotnie tego samego.

Coś w stylu

class Entity {
    int x, y;
    int width, height; // size of bounding box / sprite
    bool is_visible_in_window(); // can be virtual if needed
}

 

komentarz 8 października 2018 przez Poczprogramista123 Bywalec (2,900 p.)
Aaa okej i wtedy to jest moja klasa bazowa dla wszystkich klas czaje.

i wtedy przechowywanie obiektow wygladalo by tak?

list<Entity*> Wszystkie_obiekty
komentarz 8 października 2018 przez adrian17 Mentor (354,120 p.)
Na przykład, tak. (choć pewnie lepiej byłoby list->vector i goły wskaźnik -> smart pointer)
komentarz 8 października 2018 przez Poczprogramista123 Bywalec (2,900 p.)
list->vector rozwiniesz temat?
komentarz 8 października 2018 przez adrian17 Mentor (354,120 p.)
Ogólnie w zdecydowanej większości przypadków std::vector jest lepszy od std::list i jest używany "domyślnie" przez ludzi.
komentarz 8 października 2018 przez Poczprogramista123 Bywalec (2,900 p.)
Ale przeciez lista jest o wiele szybsza
komentarz 8 października 2018 przez mokrowski Mędrzec (158,800 p.)
Szybsza "w czym"(w jakiej operacji)? Poza tym lista ma słabą lokalność jeśli chodzi o cache. W dużym skrócie.
1
komentarz 8 października 2018 przez adrian17 Mentor (354,120 p.)
Lista w znaczącej większości zastosowań jest wolniejsza.

Krótki wykład twórcy C++a: https://www.youtube.com/watch?v=YQs6IC-vgmo
komentarz 8 października 2018 przez Poczprogramista123 Bywalec (2,900 p.)
Wow no prosze. Dzieki
komentarz 9 października 2018 przez Poczprogramista123 Bywalec (2,900 p.)

@adrian17, Wyczytalem ze lista ma szybkie dodawanie ale wolny odczyt a vector przeciwnie. Przeciez przy wektorze jak dodajemy czy usuwamy element to musimy przekopiowac cala tablice.

komentarz 9 października 2018 przez mokrowski Mędrzec (158,800 p.)
komentarz 9 października 2018 przez adrian17 Mentor (354,120 p.)

Wyczytalem ze lista ma szybkie dodawanie ale wolny odczyt a vector przeciwnie

Tylko dodawanie na początku/końcu - w środku, trzeba najpierw tam przeiterować, co jest wolne. Do tego zajmuje więcej pamięci.

Przeciez przy wektorze jak dodajemy czy usuwamy element to musimy przekopiowac cala tablice.

Tylko przy dodawaniu/usuwaniu w środku lub na początku; na końcu, dodawanie jest dość tanie.

Podobne pytania

0 głosów
4 odpowiedzi 2,348 wizyt
pytanie zadane 4 września 2015 w C i C++ przez xR Mądrala (6,260 p.)
0 głosów
2 odpowiedzi 636 wizyt
0 głosów
1 odpowiedź 791 wizyt

93,454 zapytań

142,449 odpowiedzi

322,718 komentarzy

62,833 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj

Kursy INF.02 i INF.03
...