使用模板
Working with templates
我目前正在学习c++模板,有些东西我不明白。到目前为止,我知道如果您有以下泛型类
template <class T> class A{
...
}
要提供类的特定专门化,例如对于int
对象,需要定义以下内容:
template<> class A<int>{
...
}
然而,我已经看到了类似以下的情况:
原类为,
template <class T, int Size> class buffer{
...
}
则int
类型对象的专门化类为,
template <int Size> class buffer<int, Size>{
...
}
我很困惑,为什么int
的专门化不如下:
template<> class bufffer<int, int Size>{
...
}
谁能解释一下。
这个buffer
模板有两个模板参数。第一个是类型参数,因为它以class
开头;第二个是非类型参数,因为它以int
开头。
您所看到的是对第一个参数的部分专门化。请注意,模板专门化的模板参数完全独立于原始模板的模板参数(这是我在学习时感到困惑的主要问题之一)。例如,它可以像下面这样工作:
template <int N> class buffer<int, N> { ... };
当buffer
的第一个模板参数是int
类型,第二个是某个int
值时,它基本上给出了一个专门化。
当您以template <>
(空括号)开头时,这是一个显式特化,您在其中指定所有模板参数。例如,您可以这样做:
template <> class buffer<int, 1> { ... };
当第一个模板参数是int
类型,第二个是值1
时,这将是一个特化
相关文章:
- 没有找到相关文章