0Pricing
C++ Academy · Lekcja

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 version

Ograniczone 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

  1. Dlaczego concepts zamiast SFINAE
  2. Definiowanie concepts za pomocą requires
  3. Używanie concepts w szablonach i auto
  4. Typowe concepts biblioteki standardowej: integral, ranges
← Powrót do C++ Academy