10

У меня есть класс шаблонов, для которого у меня есть некоторые специализации.
Но следующая специализация - это сам шаблон. Как вы это указали:Специализация, которая сама по себе является шаблоном

template<typename T> 
class Action 
{ 
    public: void doStuff() { std::cout << "Generic\n"; } 
} 

// A specialization for a person 
template<> 
class Action<Person> 
{ 
    public: void doStuff() { std::cout << "A Person\n";} 
} 


// I can easily specialize for vectors of a particular type. 
// But how do I change the following so that it works with all types of vector. 
// Not just `int` 
template<> 
class Action<std::vector<int> > 
{ 
    public: void doStuff() { std::cout << "A Generic Vector\n";} 
} 
+2

Мне просто интересно, что вы этого не знаете! – Nawaz

+0

@ Наваз: Я тоже подумал, возможно, поздняя ночь? –

+0

Теперь, когда я вижу ответ, это очевидно, но я продолжал добавлять в них еще одну строку шаблона. –

ответ

19

Простая частичная специализация?

template <typename T> 
class Action<std::vector<T>> { 
public: 
    void doStuff() { std::cout << "A Generic Vector\n"; } 
}; 
+2

+1. Иногда (часто?) Очевидным ответом является правильный ответ :) – ereOn

+0

@ereOn: настоящий вопрос -> почему я получаю так много голосов за такой тривиальный ответ: x? –

+2

Я думаю, люди просто любят простоту :) – ereOn