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
- Por que conceitos em vez de SFINAE
- Definir conceitos com requires
- Usar conceitos em modelos e auto
- Conceitos padrão comuns: integral e intervalos