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); // doubletypename 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 intDedukowanie 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); // explicitDedukowanie 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
- Szablony funkcji i klas — powtórzenie
- Specjalizacja szablonów: częściowa i pełna
- Szablony wariadyczne i paczki parametrów
- Funkcje constexpr i if constexpr