Ho problemi a specializzare un modello interno quando tutti i parametri sono noti. Ecco un esempio:Specializzazione del modello interno con i parametri predefiniti
template < typename T0 >
struct outer
{
template < typename T1 = void, typename T2 = void >
struct inner
{
typedef T1 type;
};
};
template < typename T0 >
template < typename T1 >
struct outer<T0>::inner<double,T1> { typedef int type; };
Questo funziona bene. Se io invece di specificare il modello interno in questo modo, non è così:
template < typename T0 >
template < >
struct outer<T0>::inner<double,void> { typedef int type; };
Per questo il messaggio di errore, "non valido specializzazione esplicita prima di '>' token ... racchiudono i modelli di classe non sono esplicitamente specializzate .. .template parametri non usati nella specializzazione parziale: ... T0 ". Non sono sicuro che il WTAF stia succedendo qui.
Ho anche provato questo:
template < typename T0 >
struct outer<T0>::inner<double,void> { typedef int type; };
Mi aspettavo questo a fallire e il messaggio di errore non è sorprendente. Era: "troppo pochi elenchi di parametri template".
Quindi, qual è il modo corretto per farlo? Ovviamente posso aggirarlo, ma se non dovessi preferirei non farlo.
correlati: http://stackoverflow.com/questions/9219157/why-cant-i-specialize-the-nested-template -member-without-specializing-enclosing? lq = 1 –
Hmm ... Ho fatto una ricerca ma non si è presentata. Non deve aver sacrificato la specie corretta di capra prima di farlo. –