0Pricing
C++ Academy · Aula

Definir conceitos com requires

Defina conceitos personalizados usando expressões requires e restrições

Definir conceitos com requires é uma aula grátis de C++ Academy no CoddyKit. Esta é a aula 2 de 4. Você pode ler a aula completa abaixo gratuitamente — depois pratica ao vivo no navegador com um editor de código integrado e um tutor de IA 24/7. Faz parte do caminho de aprendizado de C++ Academy, e seu progresso é sincronizado entre a web e o app CoddyKit. O curso de C++ Academy inclui 4 aulas no total.

A palavra-chave concept

Declare um conceito com template <params> concept Name = expression; A expressão deve ser um valor booleano avaliado durante a compilação.

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

Combinando características de tipo

Use operadores lógicos para combinar características em um conceito.

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

A expressão requires

Uma forma mais expressiva: liste as operações que o tipo deve aceitar.

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

Requisitos compostos

Dentro de requires, você pode especificar o tipo de resultado e restrições adicionais.

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

Requisitos aninhados

Adicione requires dentro de uma expressão requires para incluir conceitos nomeados.

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

Requisitos de tipo

Você pode exigir que um tipo tenha determinados tipos aninhados ou aliases.

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

Usando conceitos em modelos

Três sintaxes:

// 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;
}

Conceitos e parâmetros auto

Modelos de função abreviados também podem ter restrições.

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

Múltiplas restrições

Combine conceitos com && e ||.

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

Convenções de nomenclatura

A maior parte do código usa CamelCase para conceitos. Algumas bibliotecas usam minúsculas (em conformidade com a biblioteca padrão). Escolha uma convenção e mantenha-a.

Conceitos em modelos de classe

Aplique restrições aos modelos de classe da mesma forma.

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

Conceitos reutilizáveis

Defina uma biblioteca de conceitos pequenos e componha-os. Conceitos reutilizáveis tornam os modelos autoexplicativos e fáceis de manter.

Verificação rápida

Qual sintaxe dentro de uma expressão requires verifica se o resultado de a + b é convertível para T?

Recapitulação

Defina conceitos com concept Name = expression. Use expressões requires para restrições baseadas em operações, com requisitos compostos, aninhados e de tipo. Combine conceitos com && e || para expressar restrições abrangentes.

Perguntas Frequentes

A aula “Definir conceitos com requires” é grátis?

Sim — o texto completo de “Definir conceitos com requires” é grátis para ler aqui na web. Para praticá-la interativamente (um editor de código integrado e um tutor de IA 24/7) e desbloquear o restante do curso de C++ Academy, atualize para CoddyKit PRO. O curso de C++ Academy inclui 4 aulas no total.

O que vou aprender em “Definir conceitos com requires”?

Defina conceitos personalizados usando expressões requires e restrições Você pratica C++ Academy com código prático que executa diretamente no navegador, e um tutor de IA 24/7 responde suas dúvidas enquanto trabalha na aula.

Preciso ter experiência prévia para começar C++ Academy?

Nenhuma experiência prévia é necessária. C++ Academy no CoddyKit é estruturado para alunos iniciantes até avançados, então você pode começar aqui ou desde o início e aprender no seu ritmo. Esta é a aula 2 de 4.

Quanto tempo leva a aula “Definir conceitos com requires”?

A maioria das aulas CoddyKit leva cerca de 5–10 minutos. Cada uma é compacta e interativa, então você faz progresso constante e retoma exatamente de onde parou entre web e app.

Posso escrever e executar código nesta aula de C++ Academy?

Sim. Cada aula de C++ Academy inclui um editor de código integrado, então você escreve e executa código real direto no navegador e recebe feedback de IA instantaneamente — nenhuma configuração local necessária.

Todas as aulas deste curso

  1. Por que conceitos em vez de SFINAE
  2. Definir conceitos com requires
  3. Usar conceitos em modelos e auto
  4. Conceitos padrão comuns: integral e intervalos
← Voltar para C++ Academy