C++ 既然有了重载函数,函数模版特化还有什么意义?
如函数模板
template <class T>
bool equal(const T l, const T r)
可以编写const char*的特化版本
template <>
bool equal<const char*>(const char* const l, const char* const r)
但是与其加一个特化,为什么不直接去写一个重载函数?特化的意义在哪里?
bool equal(const char* const l, const char* const r)
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
对于函数模板特化,一个流行的观点是没什么用,并且最好别用。Why Not Specialize Function Templates?。
不过存在一些只允许特化的特殊场合:比方说在扩展std::swap时,标准约定只允许特化,不允许重载。Extending the namespace std (until C++20)
函数模板特化和重载在重载决议时有些细微的差别,了解一下这些差别还是有必要的。这些差别引发的效果中比较有用的一个是阻止某些隐式转换。如当你只有
void foo(int)
时,以浮点类型调用会发生隐式转换,这可以通过特化来阻止:虽然模板配重载也可以达到同样的效果,但特化版的意图更加明确。