0Pricing
C++ Academy · Lekcja

Definiowanie concepts za pomocą requires

Definiuj własne concepts za pomocą wyrażeń requires i ograniczeń

Definiowanie concepts za pomocą requires to bezpłatna lekcja C++ Academy na CoddyKit. To lekcja 2 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.

Słowo kluczowe concept

Koncept deklaruje się za pomocą template <params> concept Name = expression; Wyrażenie musi być wartością logiczną obliczaną podczas kompilacji.

template <typename T>
concept Integer = std::is_integral_v<T>;

Łączenie cech typów

Użyj operatorów logicznych, aby połączyć cechy w koncept.

template <typename T>
concept SignedInteger = std::is_integral_v<T> && std::is_signed_v<T>;

Wyrażenie requires

Bardziej ekspresyjna forma: wypisz operacje, które typ musi obsługiwać.

template <typename T>
concept Addable = requires(T a, T b) {
    a + b;
};

Wymagania złożone

Wewnątrz requires można określić typ wyniku i dodatkowe ograniczenia.

template <typename T>
concept Number = requires(T a, T b) {
    { a + b } -> std::convertible_to<T>;
    { a * b } -> std::convertible_to<T>;
};

Wymagania zagnieżdżone

Dodaj requires wewnątrz wyrażenia requires, aby włączyć nazwane koncepty.

template <typename T>
concept Sortable = requires(T t) {
    { t.begin() };
    { t.end() };
    requires std::movable<typename T::value_type>;
};

Wymagania dotyczące typów

Można wymagać, aby typ zawierał określone typy zagnieżdżone lub aliasy.

template <typename T>
concept HasValueType = requires {
    typename T::value_type;
};

Używanie konceptów w szablonach

Trzy składnie:

// 1. Replace typename
template <Integer T>
T increment(T x) { return x + 1; }

// 2. requires after template parameters
template <typename T>
    requires Integer<T>
T increment(T x) { return x + 1; }

// 3. requires after function signature
template <typename T>
T increment(T x) requires Integer<T> {
    return x + 1;
}

Koncepty i parametry auto

Skrócone szablony funkcji również mogą mieć ograniczenia.

void process(Integer auto x) { std::cout << x; }

Wiele ograniczeń

Połącz koncepty za pomocą && i ||.

template <std::integral T, std::integral U>
    requires (sizeof(T) >= sizeof(U))
T promote(U value) { return static_cast<T>(value); }

Konwencje nazewnictwa

W większości kodu koncepty zapisuje się w stylu CamelCase. Niektóre biblioteki używają małych liter, zgodnie ze standardową biblioteką. Wybierz jedną konwencję i konsekwentnie jej przestrzegaj.

Koncepty w szablonach klas

Wprowadź ograniczenia w szablonach klas w ten sam sposób.

template <std::integral T>
class Counter { T value_; /* ... */ };

Koncepty wielokrotnego użytku

Zdefiniuj bibliotekę małych konceptów i komponuj je ze sobą. Koncepty wielokrotnego użytku sprawiają, że szablony same dokumentują swój cel i są łatwe w utrzymaniu.

Szybkie sprawdzenie

Która składnia wewnątrz wyrażenia requires sprawdza, czy wynik a + b można konwertować do T?

Podsumowanie

Definiuj koncepty za pomocą concept Name = expression. Używaj wyrażeń requires do określania ograniczeń opartych na operacjach, w tym wymagań złożonych, zagnieżdżonych i dotyczących typów. Łącz koncepty za pomocą && i ||, aby wyrażać rozbudowane ograniczenia.

Często zadawane pytania

Czy lekcja „Definiowanie concepts za pomocą requires” jest bezpłatna?

Tak — pełny tekst „Definiowanie concepts za pomocą requires” 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 „Definiowanie concepts za pomocą requires”?

Definiuj własne concepts za pomocą wyrażeń requires i ograniczeń Ć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 2 z 4.

Ile czasu zajmuje lekcja „Definiowanie concepts za pomocą requires”?

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