Supponiamo di avere due classi Foo1<T>
e Foo2<T>
.Come dichiarare il parametro modello di modello
allora voglio creare una funzione bar
che prende un riferimento a un std::vector<Foo1<T>>
o ad una std::vector<Foo2<T>>
ma sempre restituisce un std::vector<Foo1<T>>
:
template<class T, class Y> std::vector<Foo1<T>> bar(std::vector<Y<T>>&)
Purtroppo ma il compilatore non piace il <Y<T>>
po. Un modo per aggirare questo è fornire due sovraccarichi ma c'è un modo per sistemare quanto sopra così è corretto?
Grazie. Sei un angelo! –
A partire da C++ 14 'Y' può anche essere dichiarato con' typename' invece di solo 'class'. Il parametro 'T' può sempre essere dichiarato così. solo un po 'di coerenza sintattica aggiunta alla lingua. – emsr
@emsr Mi piace usare 'class' esclusivamente all'interno delle parentesi' template', proprio per rendere più facile la ricerca di costrutti 'typename T :: type'. – TemplateRex