yue*_*ngz 2 c++ partial-specialization template-meta-programming
我们可以显式地部分实例化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>;
Run Code Online (Sandbox Code Playgroud)
就像我们可以拥有的:
template class <typename T>
class MyClass {
...
};
template class MyClass<int>;
template class MyClass<float>;
Run Code Online (Sandbox Code Playgroud)
模板不是类.这是一个模板.(构建课程的蓝图).只有在考虑所有模板参数时,它才能成为一个类.
写了这个(拼写错误):
template <typename T, int N>
class MyClass {
};
Run Code Online (Sandbox Code Playgroud)
您可以通过各种方式执行此操作:
template<int N> class MyClass<int, N>;
template<int N> class MyClass<float, N>;
Run Code Online (Sandbox Code Playgroud)
但它不是实例化模板(因为它没有意义),也不是实例化由该模板形成的具体类.它实际上正在做的是向前声明模板的部分专用(可能是无限的)子集的存在.
你也可以这样做:
template<int N> class MyClass<int, N> {};
template<int N> class MyClass<float, N> {};
Run Code Online (Sandbox Code Playgroud)
其中部分专门MyClass用于<int, [all values of N]>和<float, [all values of N]>.
但是,此模板子集仍未实例化.仅仅定义了.
实际上实例化一个模板,无论是否部分专用,我们必须命名它,占所有模板参数.
| 归档时间: |
|
| 查看次数: |
852 次 |
| 最近记录: |