Używanie concepts w szablonach i auto
Ograniczaj szablony funkcji i skrócone szablony funkcji za pomocą concepts
Używanie concepts w szablonach i auto to bezpłatna lekcja C++ Academy na CoddyKit. To lekcja 3 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.
Podsumowanie trzech składni
Koncept można zastosować na trzy sposoby: jako prefiks parametru szablonu, jako klauzulę requires lub za pomocą skróconej składni szablonu funkcji.
Składnia prefiksowa
Zastąp typename nazwą konceptu.
template <std::integral T>
T add(T a, T b) { return a + b; }Składnia klauzuli requires
Dodaj requires za listą parametrów szablonu. Jest najbardziej elastyczna — obsługuje złożone warunki.
template <typename T>
requires std::integral<T> || std::floating_point<T>
T add(T a, T b) { return a + b; }Końcowa klauzula requires
Umieść requires za sygnaturą funkcji — jest to przydatne w funkcjach składowych, gdy ograniczenie zależy od parametrów.
template <typename T>
class Container {
public:
void sort() requires std::sortable<T> { /* ... */ }
};Skrócone szablony funkcji
Użyj auto w parametrach i określ dla niego ograniczenie. Kompilator tworzy szablon niejako w tle.
void greet(std::convertible_to<std::string> auto name) {
std::cout << "Hello " << name;
}Wiele parametrów auto
Każdy parametr auto może mieć własny koncept. Każdy parametr auto tworzy niezależny parametr szablonu.
auto multiply(std::integral auto a, std::integral auto b) {
return a * b;
}Koncepty z szablonami klas
Obowiązują te same trzy składnie.
template <std::movable T>
class Buffer { /* ... */ };
template <typename T>
requires std::default_initializable<T>
class Storage { /* ... */ };Ograniczone lambdy (C++20)
Lambdy mogą mieć jawne parametry szablonu z konceptami.
auto print = []<std::integral T>(T x) {
std::cout << x << " is integral";
};
print(42);Rozstrzyganie przeciążenia na podstawie konceptów
Kompilator wybiera najbardziej ograniczone przeciążenie, które pasuje. Bardziej szczegółowe koncepty mają pierwszeństwo przed mniej szczegółowymi.
void process(std::integral auto x) { std::cout << "int\n"; }
void process(std::signed_integral auto x) { std::cout << "signed\n"; }
process(42); // calls signed_integral versionOgraniczone funkcje składowe
Funkcje składowe szablonu klasy mogą mieć własne ograniczenia.
template <typename T>
class Optional {
T value_;
public:
void clear() requires std::is_trivially_destructible_v<T> { /* fast */ }
void clear() { /* general */ }
};Ograniczone typy z inicjalizacją domyślną
Połącz requires z wartościami domyślnymi, aby pisać przejrzyste szablony jasno wyrażające intencję.
Wskazówki dotyczące stylu
W typowych przypadkach używaj składni prefiksowej. Przejdź na requires, gdy ograniczenia są złożone lub dotyczą wielu typów. Skróconych szablonów funkcji używaj w krótkich, wyspecjalizowanych funkcjach.
Szybkie sprawdzenie
Jaka jest skrócona składnia szablonu funkcji dla „funkcji przyjmującej dowolną wartość całkowitą”?
Podsumowanie
Stosuj koncepty jako prefiksy, w klauzulach requires lub w skróconych szablonach funkcji. Spośród pasujących przeciążeń wygrywa to z najbardziej restrykcyjnymi ograniczeniami. Używaj najczytelniejszej składni: prefiksowej dla prostych przypadków, requires dla złożonych i skróconej dla krótkich funkcji.
Często zadawane pytania
Czy lekcja „Używanie concepts w szablonach i auto” jest bezpłatna?
Tak — pełny tekst „Używanie concepts w szablonach i auto” 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 „Używanie concepts w szablonach i auto”?
Ograniczaj szablony funkcji i skrócone szablony funkcji za pomocą concepts Ć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 3 z 4.
Ile czasu zajmuje lekcja „Używanie concepts w szablonach i auto”?
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
- Dlaczego concepts zamiast SFINAE
- Definiowanie concepts za pomocą requires
- Używanie concepts w szablonach i auto
- Typowe concepts biblioteki standardowej: integral, ranges