具有和不具有模板的功能相同

Same function with and without template

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

我正在尝试理解C++11的一段代码。
一个类包含2个函数,如下所示:

class abc
{
public:
    void integerA(int x);
    template<typename typ>
    void integerA(typ x);
};

我无法理解声明两个相同函数的好处。为什么不只声明一个模板函数?

我只能假设一个好处是,我们知道可以传递给该函数的int数据类型。这可能会快一点。但为此,我们真的需要创建一个具有int数据类型的单独函数吗?

这样做的主要原因是专门化void integerA(int x)来做其他事情。也就是说,如果程序员向成员函数abc::integerA提供int作为输入参数,那么由于C++规则而不是实例化模板成员函数,编译器将选择void integerA(int x),因为在可能的情况下,优选具体函数,而不是实例化模板版本。

一种更直接的方法是以以下方式专门化模板成员函数:

class abc
{
public:
    template<typename typ>
    void integerA(typ x);
};
template<typename typ>
void abc::integerA(typ x) {
  ...
}
template<>
void abc::integerA(int x) {
  ...
}

现场演示