2013-05-19 2 views
2

Я пытаюсь реализовать класс шаблона и хочу ограничить его специализацией для определенного класса шаблонов. Например, в следующих кодах я хочу определить класс шаблона CTest, который может быть специализирован только для std::vector<T> для некоторого параметра шаблона T. Для других параметров шаблона класс должен быть не определен. Как реализовать класс шаблона?Специализация шаблона класса C++ для заданного шаблона класса

// the interface should be something like following 
//template <typename std::vector<T> > 
//class CTest<std::vector<T> >; 

int main(int argc, char* argv[]) 
{ 
    CTest<std::vector<int> > t1; // successful 
    CTest<std::vector<string> > t1; // successful 
    CTest<int> t2;     // compile error 
    return 0; 
} 

ответ

2

Оставьте основной шаблон не определен, и только частично специализировать для типов, которые вы хотите, чтобы признать:

template <typename> class CTest; // undefined 


#include <vector> 

template <typename T, typename Alloc> 
class CTest<std::vector<T, Alloc>> 
{ 
    // ... your template here ... 
}; 
+0

Это работает. Спасибо! –

0

шаблона специализация может быть реализован с совершенно другим интерфейсом, чем в шаблоне класса они специализируются. Невозможно ограничить, какие шаблонные специализации могут существовать.

Если вы хотите повлиять на то, что можно использовать в качестве параметра шаблона, вместо этого используйте экземпляр шаблона.