3

kann sagen, ich habe eine Templat-KlasseGesamt Klasse Spezialisierung für eine Vorlage

template <typename T> 
struct Widget 
{ 
    //generalized implementation 
} 

aber ich wollte ganz spezialisieren .. für eine Vorlage, die einen Parameter akzeptiert?

template <> 
struct Widget< TemplateThatAcceptsParameter<N> > 
{ 
     //implementation for Widget for TemplateThatAcceptsParameterN 
     //which takes parameter N 
} 

Wie geht man dabei vor?

Antwort

8

Dies ist eine Teil Spezialisierung genannt und kann wie folgt codiert werden:

template <typename T> 
struct Widget 
{ 
    //generalized implementation 
}; 

template <typename N> 
struct Widget< TemplateThatAcceptsParameter<N> > 
{ 
    //implementation for Widget for TemplateThatAcceptsParameterN 
    //which takes parameter N 
}; 

Es funktioniert wie eine normale Spezialisierung, hat aber ein zusätzliches Template-Argument.

+0

+1. Wichtiger Vorbehalt: nur für 'struct' und' class', gilt nicht für Funktionen (es wird dann überladen). –

+0

+1, funktioniert auch für 'union' (das sind auch Klassen wie' struct' und 'class'). –

1
template < typename N > 
struct Widget< template_thing<N> > 
{ 
    ... 
};