我试图理解一段C ++ 11的代码 一个类包含两个函数,如下所示:
class abc
{
public:
void integerA(int x);
template<typename typ>
void integerA(typ x);
};
我无法理解声明2个相同功能的好处。为什么不只声明一个模板函数?
我可以假设只有一个好处是我们知道可以传递给此函数的int
数据类型。这可能会快一些。但为此,我们是否真的需要使用int
数据类型创建单独的函数?
答案 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) {
...
}