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

Template - Przydatność szablonów klas i ich wykorzystywanie

Ostatnio zmodyfikowano 2017-01-31 20:34
Autor Wiadomość
latajacaryba
Temat założony przez niniejszego użytkownika
Template - Przydatność szablonów klas i ich wykorzystywanie
» 2017-01-31 00:37:27
Witam. Czytałem tematy na forum i trafiłem na słowo kluczowe template. Znalazłem kurs na forum http://cpp0x.pl/kursy/Kurs-C++/Szablony-funkcji/315 .
Z tego co zrozumiałem, dzięki template tworzymy jakby typ, który nie wiadomo czym jest.
C/C++
template < class typ >
typ funkcja( typ zmienna ) {
    return zmienna * zmienna;
}
I jeśli wywołamy tą funkcję w taki sposób:
C/C++
int main() {
    double = funkcja < double >( 10, 5 );
}

To jest jasne. Ale teraz przejdźmy do szablonów klas:
W kursie mamy:
C/C++
template < int ilosc >
class tablica_typu_int
{
public:
    int zmienna[ ilosc ]; //nasza ilosc
    int zmienna_zawierajaca_prawidlowa_ilosc;
    //itd...
};
int main() {
    tablica_typu_int < 11 > nowa;
}
Po co to? Czy nie łatwiej po prostu napisać konstruktora, który nam stworzy taką tablicę? Znaczy jedyna różnica to to, iż ta tablica jest statyczna (nie dynamiczna). Ale czy tylko po to to jest? Z tego co widziałem na wiki to jest tam lepszy przykład: https://pl.wikipedia.org/wiki/Szablon_klasy
A więc szablony klas pozwalają stworzyć "uniwersalną" klasę. Tylko... po co? Klasy są zwykle robione precyzyjnie pod jakąś rzecz. Jak tu zrobić klasę, która ma mieć 10 konkretnych zmiennych, i dane funkcje i pogodzić ją z klasą która ma 2 zmienne i zaledwie kilka metod?
Nie da się chyba zrobić szkieletu klasy, która pogodziłaby klasę człowiek składniki imie, nazwisko itp. z klasą mikrofalówka składniki napięcie, natężenie, moc itp.
P-157148
1aam2am1
» 2017-01-31 01:39:27
Takie rzeczy się robi aby nie pisać ciągle tego samego.
Mamy klasę basic_ostream
i basic_ostream<char> to cout
a basic_ostream<wchar> to wcout

Mają te same funkcje,operują na tym samym wyjściu. Jedyne czym się różnią to typem danych wypisywanych. cout wypisuję w kodowani konsoli.
A wcout powinien w utf-8.

PS. wcout nigdy nie działa i są z nim same problemy więc lepiej z niego nie korzystać.
Ale jeżeli chodzi o template można stworzyć wiele zaawansowanych klas, które piszą nam kod za nas.

Np. Pewien facet na github wykorzystał template, c++11 i zapewnił bind każdej funkcji przyjmującej tylko typy podstawowe do pewnej klasy.
Klasa ta pozwalała połączyć się z jego inną aplikacją i zdalnie asynchronicznie lub synchronicznie wywoływać funkcje.
Serwer kazał wywołać bindowaną funkcje lokalnie.
Za pomocą template. Kod taki to około 100. Gdybym chciał to zrobić dla jednego wzoru funkcji przyjmującej załóżmy jeden int. To jest to 20 linijek kodu. Ale przy większych projektach. 20 linijek dla każdej funkcji to za dużo. Pisze się raz 100 i wszędzie się tego template wykorzystuje do bindowania funkcji. Gdy coś nie działa wiadomo gdzie trzeba zajrzeć. A to tylko czubek góry lodowej.
P-157149
mateczek
» 2017-01-31 08:43:23
Template - Przydatność szablonów klas i ich wykorzystywanie
Ludzie piszący kompilator i tworzący standard języka nie są debilami, I skoro wymyślili i wprowadzili szablony, funkcje virtualne, to nie dla hecy, ale po to, iż były potrzebne.

Wszystkie kontenery, cała biblioteka STL (Standard Template Library) http://cpp0x.pl/kursy​/Kurs-STL-C++/114 -  nikt tego nie pisał dla jaj. Jeśli choc raz użyłeś choćby kontenera vector czy jakiegokolwiek strumienia to sam sobie odpowiedz czy są potrzebne??;
P-157151
karambaHZP
» 2017-01-31 09:52:18
C/C++
template < int ilosc >
class tablica_typu_int
{
public:
    int zmienna[ ilosc ]; //nasza ilosc
    int zmienna_zawierajaca_prawidlowa_ilosc;
    //itd...
};
To jest prosta implementacja już dostępnej klasy std::array<>.

Czy nie łatwiej po prostu napisać konstruktora, który nam stworzy taką tablicę?
Tak jak wspomniałeś, można dynamicznie w konstruktorze, lecz taka stała tablica jest szybsza od dynamicznej.
std::array <>
 to zwykła tablica opakowana w klasę, której wydajność jest nie mniejsza od gołej stałej tablicy.
Klasa zapewnia bezpieczeństwo i kontrolę tablicy, z której możemy skorzystać.

Przydatność szablonów klas
Docenisz, gdy zaczniesz korzystać ;)

http://wazniak.mimuw.edu.pl​/index.php​?title=Zaawansowane_CPP​/Wyk%C5%82ad_1:_Szablony_I
Frazy, które należy wpisać w wyszukiwarkę google:
Wczoraj przewinął się temat szablonu klasy: Skrócone wywołanie funkcji
A tak to wygląda wg MSDN: https://4programmers.net​/Pastebin/6341

Korzyścią jest też produkcja klasy gdy jest potrzebna, a nie na zapas, jak w przypadku zwykłych klas (funkcji).
P-157153
latajacaryba
Temat założony przez niniejszego użytkownika
» 2017-01-31 20:34:12
Ludzie piszący kompilator i tworzący standard języka nie są debilami, I skoro wymyślili i wprowadzili szablony, funkcje virtualne, to nie dla hecy, ale po to, iż były potrzebne. 
Wiem, nigdzie tak nie twierdziłem. Po prostu chciałem się dowiedzieć, do czego się przydają.
Vectorów już raz używałem, nie wiedziałem wtedy jednak o istnieniu template.
Na razie tematu nie zamykam, może będę chciał się coś dopytać:)
P-157178
« 1 »
  Strona 1 z 1