2016-08-11 116 views
2

我们能否显式实例化C++模板?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>; 

回答

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

这对于<int, [all values of N]><float, [all values of N]>部分专业MyClass

但是,该模板子集仍未实例化。仅限定义为

要真正实例化一个模板,无论是否部分专用,我们必须命名它,说明所有模板参数。