【发布时间】:2019-09-26 02:25:30
【问题描述】:
我无法通过谷歌搜索到这个问题的答案。
什么时候应该使用模板、模板重载和普通函数重载?
我有一个总是使用模板的偏好,感觉像更少的输入和更通用的代码,但开始质疑我自己,为什么当我们有模板时人们还要使用函数重载。
我看到的唯一区别是,在模板的情况下,默认模板声明将处理所有特殊情况不会处理的情况,而对于普通函数,我们必须编写至少两倍的代码。
在下面的第三个示例中,有时单个模板就足够了。 所以这里的主要问题是为什么要为简单的函数重载而烦恼?
例如:
void func(int param)
{
// ...
}
void func(double param)
{
// ...
}
void func(char param)
{
// ...
}
模板也可以达到同样的效果:
template<typename T>
void tmpl(T param)
{
// ...
}
template<>
void tmpl(double param)
{
// ...
}
template<>
void tmpl(char param)
{
// ...
}
在大多数情况下,我们甚至不需要重载模板,因为我们所关心的只是确保数据类型大小正确,而函数的算法相同。
所以在这些情况下,我们可以这样写:
template<typename T>
void tmpl(T param)
{
// ...
}
虽然使用普通函数,但我们需要做更多的工作。
编辑: 我发现this 很好的答案有点相关,但并没有完全涵盖我的问题:
【问题讨论】:
标签: c++ function templates overloading