使用和不使用模板

时间:2015-06-22 05:28:10

标签: c++ c++11

我试图理解一段C ++ 11的代码 一个类包含两个函数,如下所示:

class abc
{
public:
    void integerA(int x);

    template<typename typ>
    void integerA(typ x);
};

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

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

1 个答案:

答案 0 :(得分:4)

做这样的事情的主要原因是专门化void integerA(int x)做其他事情。也就是说,如果程序员将int作为输入参数提供给成员函数abc::integerA,那么由于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) {
  ...
}

LIVE DEMO

相关问题