Verwandte Fragen:Klasse Template Spezialisierung mit Template-Klasse
- c++ nested template specialization with template class
- template class specialization with template class parameter
Betrachten Sie den folgenden Code ein:
template <typename T>
struct is_std_vector: std::false_type { };
template<typename ValueType>
struct is_std_vector<std::vector<ValueType>>: std::true_type { };
Warum ist eine solche Template-Klasse Spezialisierung Syntax korrekt? Die folgende scheint logisch:
template <typename T>
struct is_std_vector: std::false_type { };
template<> //--- because it is is_std_vector specialization
template<typename ValueType>
struct is_std_vector<std::vector<ValueType>>: std::true_type { };
die zweite ist überhaupt nicht logisch. 'template <>' bedeutet, dass Sie sich eindeutig nur für eine Art von 'T' spezialisieren. Was Sie tun, ist eine teilweise Spezialisierung (Sie geben eine unendliche Teilmenge von T an. D. H. Nur diejenigen, die die Form 'std :: vector' erfüllen) –