0Pricing
C++ Academy · Lekcja

Szablony funkcji i klas — powtórzenie

Pisz generyczne funkcje i klasy z użyciem poprawnej składni szablonów

Szablony funkcji i klas — powtórzenie to bezpłatna lekcja C++ Academy na CoddyKit. To lekcja 1 z 4. Możesz przeczytać całą lekcję poniżej za darmo — a potem ćwiczyć ją interaktywnie w przeglądarce z wbudowanym edytorem kodu i tutorem AI dostępnym 24/7. To część ścieżki edukacyjnej C++ Academy, a Twój postęp synchronizuje się między webem a aplikacją CoddyKit. Kurs C++ Academy zawiera 4 lekcji w sumie.

Po co używać szablonów?

Szablony pozwalają napisać kod raz, a następnie wygenerować przez kompilator konkretne wersje dla każdego użytego typu. To podstawa programowania generycznego.

Składnia szablonu funkcji

Parametry typów deklaruje się za pomocą template <typename T>. Parametru T należy użyć w sygnaturze funkcji.

template <typename T>
T max_of(T a, T b) {
    return (a > b) ? a : b;
}

std::cout << max_of(3, 7);          // int
std::cout << max_of(2.5, 1.5);      // double

typename a class

Słowa kluczowe typename i class są zamienne w deklaracjach parametrów szablonu. We współczesnym stylu częściej używa się typename.

Wiele parametrów typów

Szablony mogą mieć wiele parametrów typów.

template <typename T, typename U>
auto combine(T a, U b) -> decltype(a + b) {
    return a + b;
}

Parametry nietypowe

Parametry szablonu mogą być również wartościami nietypowymi: liczbami całkowitymi, wartościami wyliczeń i wskaźnikami.

template <typename T, size_t N>
struct StaticArray {
    T data[N];
};

StaticArray<int, 10> arr;

Szablony klas

Klasy generyczne używają tej samej składni szablonów. Parametru typu należy używać w składowych i metodach.

template <typename T>
class Stack {
    std::vector<T> data_;
public:
    void push(T x) { data_.push_back(std::move(x)); }
    T pop()        { T t = std::move(data_.back()); data_.pop_back(); return t; }
};

Stack<int> s1;
Stack<std::string> s2;

Funkcje składowe poza klasą

Definicje umieszczone poza klasą wymagają prefiksu szablonu przy każdej funkcji składowej.

template <typename T>
class Stack {
public:
    void push(T x);
};

template <typename T>
void Stack<T>::push(T x) {
    data_.push_back(std::move(x));
}

Domyślne argumenty szablonu

Działają podobnie jak domyślne argumenty funkcji. Są używane, gdy wywołujący nie określi argumentu.

template <typename T = int>
class Box {
    T value;
};

Box<> b;       // T is int

Dedukowanie argumentów szablonu

Kompilator często dedukuje argumenty szablonu na podstawie wywołania.

template <typename T>
void print(T x) { std::cout << x; }

print(42);          // T deduced as int
print("hello");    // T deduced as const char*
print<double>(3);   // explicit

Dedukowanie argumentów szablonu klasy (C++17)

C++17 pozwala pominąć argumenty szablonu klasy, gdy można je wydedukować na podstawie konstruktora.

std::pair p(1, 2.5);            // pair<int, double>
std::vector v{1, 2, 3};         // vector<int>

Wyszukiwanie dwuetapowe

W szablonach wyszukiwanie odbywa się w dwóch etapach — podczas definiowania (nazwy niezależne od parametrów) i podczas tworzenia instancji (nazwy zależne od parametrów). Dzięki temu wiele błędów jest wykrywanych już podczas definiowania.

Komunikaty o błędach

Błędy szablonów mogą onieśmielać. Należy czytać komunikat od dołu do góry, skupić się na lokalizacji w kodzie źródłowym i używać konceptów C++20, aby usprawnić diagnostykę.

Szybkie sprawdzenie

Jaka funkcja pozwala skompilować std::vector v{1, 2, 3}; bez określania std::vector<int>?

Podsumowanie

Szablony generują kod zależny od typu podczas kompilacji. Szablony funkcji i klas definiuje się za pomocą template <typename T>. Kompilator dedukuje argumenty, gdy jest to możliwe — w razie potrzeby należy określić je jawnie.

Często zadawane pytania

Czy lekcja „Szablony funkcji i klas — powtórzenie” jest bezpłatna?

Tak — pełny tekst „Szablony funkcji i klas — powtórzenie” jest dostępny za darmo tutaj w sieci. Aby ćwiczyć ją interaktywnie (wbudowany edytor kodu i tutor AI dostępny 24/7) i odblokować resztę kursu C++ Academy, przejdź na CoddyKit PRO. Kurs C++ Academy zawiera 4 lekcji w sumie.

Co nauczysz się w „Szablony funkcji i klas — powtórzenie”?

Pisz generyczne funkcje i klasy z użyciem poprawnej składni szablonów Ćwiczysz C++ Academy z praktycznym kodem, który uruchamiasz bezpośrednio w przeglądarce, a tutor AI dostępny 24/7 odpowiada na Twoje pytania podczas pracy nad lekcją.

Czy potrzebuję doświadczenia, aby zacząć C++ Academy?

Nie wymagamy żadnego doświadczenia. C++ Academy w CoddyKit jest strukturyzowany dla początkujących i zaawansowanych użytkowników, więc możesz zacząć tutaj lub od początku i uczyć się w swoim tempie. To lekcja 1 z 4.

Ile czasu zajmuje lekcja „Szablony funkcji i klas — powtórzenie”?

Większość lekcji CoddyKit trwa około 5–10 minut. Każda lekcja to mały, interaktywny krok, dzięki czemu robisz systematyczne postępy i zawsze wracasz dokładnie do tego samego miejsca — na webie i w aplikacji.

Czy mogę pisać i uruchamiać kod w tej lekcji C++ Academy?

Tak. Każda lekcja C++ Academy zawiera wbudowany edytor kodu, więc piszesz i uruchamiasz prawdziwy kod bezpośrednio w przeglądarce i od razu otrzymujesz sprzężenie zwrotne od AI — bez konfiguracji na komputerze.

Wszystkie lekcje w tym kursie

  1. Szablony funkcji i klas — powtórzenie
  2. Specjalizacja szablonów: częściowa i pełna
  3. Szablony wariadyczne i paczki parametrów
  4. Funkcje constexpr i if constexpr
← Powrót do C++ Academy