2014-05-22 12 views
5

C'è una citazione da 3.3.9/1:Cosa template-parameter-lista di parametro di modello significa

La regione dichiarativa del nome di un parametro di modello di un modello di parametri modello è la il più piccolo elenco di parametri template in in cui è stato introdotto il nome.

Puoi fare un esempio per capire la definizione di cui sopra? Sono anche interessato a sapere cosa significa l'elenco parametri-template di un parametro template? Un esempio sarà utile.

risposta

5
template< // outer template-parameter-list 
    template< // inner template-parameter-list 
     typename q, // named parameter of a template template-parameter 
     q x // use that name 
    > // the declarative region ends here 
    class q // hence the name may be reused 
> struct x {}; 

Eccolo di nuovo senza commenti se questo aiuta a seguire:

template< template< typename q, q x > class q > 
struct x {}; 

È una classe parametrizzata su un modello che assume un valore costante di un determinato tipo. Ad esempio, potresti avere x<std::integral_constant>.

2

Essa limita il campo di applicazione di parametri di modello modello per l'elenco dei parametri più interno, per esempio vale quanto segue

template<template<typename U, typename V = U> class T> 
struct foo 
{ 
    T<int> bar(); // T<int, int> 
}; 

Ma questo non è

template<template<typename U> class T> 
struct foo 
{ 
    U bar(); // error: ‘U’ does not name a type 
}; 
Problemi correlati