给定模板类的c++类模板专门化

C++ class template specialization for given template class

本文关键字:专门化 c++      更新时间:2023-10-16

我尝试实现一个模板类,并希望将其限制为特定的模板类。例如,在下面的代码中,我想定义模板类CTest,对于某些模板参数T,它只能专门化到std::vector<T>。对于其他模板形参,类应该是未定义的。如何实现模板类?

//   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;
}

不定义主模板,只对要承认的类型进行部分特化:

template <typename> class CTest;  // undefined

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

模板专门化可以用与它们专门化的类模板完全不同的接口来实现。没有办法限制哪些模板专门化可以存在。

如果你想对模板参数的使用有一些影响,请使用模板实例化。