我们可以显式地部分实例化C ++模板吗?
template class <typename T, int N>
class MyClass {
...
};
template<int N> class MyClass<int, N>; // not meant for specification
template<int N> class MyClass<float, N>;
就像我们可以拥有的那样:
template class <typename T>
class MyClass {
...
};
template class MyClass<int>;
template class MyClass<float>;
答案 0 :(得分:5)
模板不是类。这是一个模板。 (构建课程的蓝图)。只有在考虑了所有模板参数时,它才能成为一个类。
写了这个(错字更正):
template <typename T, int N>
class MyClass {
};
您可以通过各种方式执行此操作:
template<int N> class MyClass<int, N>;
template<int N> class MyClass<float, N>;
但它不是实例化模板(因为它没有意义),也不是实例化由该模板形成的具体类。它实际上正在做的是向前声明模板的部分专用(可能是无限的)子集的存在。
你也可以这样做:
template<int N> class MyClass<int, N> {};
template<int N> class MyClass<float, N> {};
MyClass
和<int, [all values of N]>
具有部分专业<float, [all values of N]>
。
但是,此模板子集仍未实例化。仅仅定义了。
实际实例化一个模板,无论是否部分专用,我们必须命名它,占所有模板参数。