使用模板

Working with templates

本文关键字:      更新时间:2023-10-16

我目前正在学习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时,这将是一个特化

相关文章:
  • 没有找到相关文章