给定模板类的c++类模板专门化
C++ class template specialization for given template class
我尝试实现一个模板类,并希望将其限制为特定的模板类。例如,在下面的代码中,我想定义模板类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 ...
};
模板专门化可以用与它们专门化的类模板完全不同的接口来实现。没有办法限制哪些模板专门化可以存在。
如果你想对模板参数的使用有一些影响,请使用模板实例化。
相关文章:
- 是否可以对零模板参数进行模板专门化
- 尝试根据类中 typedef 的存在来专门化模板函数
- 如何基于模板化类的基类专门化成员函数
- 如何为指向复杂值的迭代器专门化算法?
- 专门化模板覆盖函数/避免对象切片
- 我能否根据其运算符()的签名专门化可变参数模板参数
- 如何使用模板化类专门化模板化函数?
- 线程 std::调用未知类型,无法专门化函数错误
- 输入两个不专门化大小的矩阵
- 如何在模板类中专门化赋值运算符?
- 如何专门化容器和枚举的模板
- Clang拒绝类模板的嵌套类仅通过专门化定义的代码是正确的吗
- 取消专门化C++模板参数
- SFINAE的变分变量模板专门化
- 如何在编译时专门化大型模板函数中的小部分
- 如何在c++运算符()中专门化调用模板
- 模板函数,其中一个参数需要专门化,而另一个不需要
- 如何专门化字符串数组的模板?
- 如何专门化模板
- 如何避免为模板化迭代器的每个可能的实例化专门化iterator_traits?