0Pricing
C++ Academy · Lezione

Usare i concepts nei template e con auto

Applichi vincoli ai template di funzione e ai template di funzione abbreviati con i concepts

Usare i concepts nei template e con auto è una lezione C++ Academy gratuita su CoddyKit. Questa è la lezione 3 di 4. Puoi leggere la lezione completa qui gratuitamente — poi esercitati direttamente nel browser con un editor di codice integrato e un tutor IA disponibile 24/7. Fa parte del percorso di apprendimento C++ Academy, e i tuoi progressi si sincronizzano tra il web e l'app CoddyKit. Il corso C++ Academy include 4 lezioni in totale.

Riepilogo delle tre sintassi

È possibile applicare un concept in tre modi: come prefisso del parametro di un template, come clausola requires oppure con la sintassi abbreviata dei template di funzione.

Sintassi con prefisso

Sostituire typename con il nome del concept.

template <std::integral T>
T add(T a, T b) { return a + b; }

Sintassi della clausola requires

Aggiungere requires dopo l'elenco dei parametri del template. È la soluzione più flessibile e supporta condizioni complesse.

template <typename T>
    requires std::integral<T> || std::floating_point<T>
T add(T a, T b) { return a + b; }

Clausola requires finale

Inserire requires dopo la firma della funzione: è utile nelle funzioni membro quando il vincolo dipende dai parametri.

template <typename T>
class Container {
public:
    void sort() requires std::sortable<T> { /* ... */ }
};

Template di funzione con sintassi abbreviata

Utilizzare auto nei parametri e applicarvi un vincolo. Il compilatore genera il template internamente.

void greet(std::convertible_to<std::string> auto name) {
    std::cout << "Hello " << name;
}

Più parametri auto

Ogni auto può avere il proprio concept. Ogni auto crea un parametro del template indipendente.

auto multiply(std::integral auto a, std::integral auto b) {
    return a * b;
}

Concept con i template di classe

Si applicano le stesse tre sintassi.

template <std::movable T>
class Buffer { /* ... */ };

template <typename T>
    requires std::default_initializable<T>
class Storage { /* ... */ };

Lambda vincolate (C++20)

Le lambda possono avere parametri espliciti del template con i concept.

auto print = []<std::integral T>(T x) {
    std::cout << x << " is integral";
};
print(42);

Risoluzione dell'overload basata sui concept

Il compilatore sceglie l'overload più vincolato tra quelli corrispondenti. I concept più specifici hanno la precedenza su quelli meno specifici.

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

Funzioni membro vincolate

I membri di un template di classe possono avere vincoli propri.

template <typename T>
class Optional {
    T value_;
public:
    void clear() requires std::is_trivially_destructible_v<T> { /* fast */ }
    void clear() { /* general */ }
};

Tipi vincolati inizializzati per impostazione predefinita

Combinare requires con valori predefiniti per scrivere template chiari e capaci di esprimere l'intento.

Guida allo stile

Utilizzare la sintassi con prefisso nei casi comuni. Passare a requires quando i vincoli sono complessi o coinvolgono più tipi. Utilizzare i template di funzione con sintassi abbreviata per funzioni brevi e mirate.

Verifica rapida

Qual è la sintassi abbreviata di un template di funzione per "una funzione che accetta un valore integrale qualsiasi"?

Riepilogo

Applicare i concept come prefissi, nelle clausole requires oppure nei template di funzione con sintassi abbreviata. Vince l'overload corrispondente più vincolato. Utilizzare la sintassi più chiara adatta al caso: prefisso per i casi semplici, requires per quelli complessi e sintassi abbreviata per le funzioni brevi.

Domande Frequenti

La lezione «Usare i concepts nei template e con auto» è gratuita?

Sì — il testo completo di «Usare i concepts nei template e con auto» è gratuito qui sul web. Per esercitarvi in modo interattivo (un editor di codice integrato e un tutor IA 24/7) e sbloccare il resto del corso C++ Academy, passa a CoddyKit PRO. Il corso C++ Academy include 4 lezioni in totale.

Cosa imparerò in «Usare i concepts nei template e con auto»?

Applichi vincoli ai template di funzione e ai template di funzione abbreviati con i concepts Eserciti C++ Academy con codice pratico che esegui direttamente nel browser, e un tutor IA 24/7 risponde alle tue domande mentre lavori sulla lezione.

Ho bisogno di esperienza per iniziare C++ Academy?

Non è richiesta alcuna esperienza precedente. C++ Academy su CoddyKit è strutturato per principianti e studenti avanzati, quindi puoi iniziare da qui o dall'inizio e procedere al tuo ritmo. Questa è la lezione 3 di 4.

Quanto tempo richiede la lezione «Usare i concepts nei template e con auto»?

La maggior parte delle lezioni CoddyKit richiede circa 5–10 minuti. Ogni lezione è breve e interattiva, quindi fai progressi costanti e riprendi esattamente da dove hai lasciato su web e app.

Posso scrivere ed eseguire codice in questa lezione C++ Academy?

Sì. Ogni lezione C++ Academy include un editor di codice integrato, quindi scrivi ed esegui codice reale direttamente nel tuo browser e ricevi feedback istantaneo dall'IA — nessuna configurazione locale necessaria.

Tutte le lezioni di questo corso

  1. Perché usare i concepts invece di SFINAE
  2. Definire concepts con requires
  3. Usare i concepts nei template e con auto
  4. Concepts standard comuni: integral e ranges::range
← Torna a C++ Academy