我正在尝试理解一段 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) {
...
}
关于c++ - 有和没有模板的功能相同,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30972625/