c++ - 有和没有模板的功能相同

标签 c++ c++11

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

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

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

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

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

最佳答案

做这样的事情的主要原因是特化 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

关于c++ - 有和没有模板的功能相同,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30972625/

相关文章:

c++ - 多态性c++

c++ - break声明的可信度

c++ - 将 boost::visitor 与 unique_ptr 的 boost::variant 结合使用

c++ - 为什么 deque::erase() 调用赋值运算符?

ICC 编译的 C++0x 问题

c++ - 将数组传递给函数,不输出任何内容

c++ - 强制在编译时评估常量表达式?

c++ - 如何在迭代字符串时使用 "skip"空格

c++ - 读取二进制文件时输出不一致

c++ - 可移动但不可复制的异常