Modello argomenti di default
Se mi è consentito fare le seguenti cose:
template <typename T = int>
class Foo{
};
Perché non mi è concesso fare le seguenti principali?
Foo me;
Ma devo specificare i seguenti:
Foo<int> me;
C++11 introdotto il modello predefinito argomenti e per ora sono in fase di inafferrabile per tutta la mia comprensione.
Devi fare:
Il modello argomenti devono essere presenti, ma non si possono lasciare vuoti.
Pensare ad esso come una funzione
foo
con un unico argomento di default. L’espressionefoo
non chiamare, mafoo()
volontà. La sintassi dell’argomento deve essere ancora lì. Questo è coerente con quella.<>
era necessario. Qualche idea?Foo
potrebbe essere un modello identificatore o potrebbe essere una esplicita istanza, a seconda se c’è un argomento di default. Meglio tenere l’esplicita istanza di sintassi. Pensate a come una funzionefoo
con un unico parametro di default. Non si possono chiamare comefoo
, è chiamata confoo()
. Ha senso mantenere questa coerenza.foo<>()
può essere abbreviatofoo()
…foo
sia; è possibile assegnare un nome di una classe di argomenti, comeFoo
tuttavia.<>
non è più necessario in questo caso. Check out la mia risposta per ulteriori dettagli.Con C++17, si può infatti.
Questa caratteristica è chiamata classe modello argomento detrazione e aggiungere una maggiore flessibilità per il modo in cui è possibile dichiarare variabili di basati su modelli, tipi.
Così,
è ora legale codice C++ .
È possibile utilizzare le seguenti:
E hanno
int
essere il modello argomento. Le parentesi quadre sono necessari e non può essere omesso.Non è consentito farlo, ma si può fare questo
e quindi fare
typedef Foo<float> Fooo;
, senza un tipo di default?using Fooo = Foo<>;