c++ - 函数重载和模板函数有什么区别?哪个更合适?
问题描述
template<>std::string Add(std::string x ,std::string y)
{
return x.append(y);
}
std::string Add(std::string x ,std::string y)
{
return x.append(y);
}
如果我们可以使用函数重载来专门化代码,那为什么还需要模板专门化呢?
解决方案
因为根据用例,您有时会编写通用的容器/函数,即它们适用于每种类型。比如说std::vector
。std::vector<string>
但是,当您使用and时,向量的含义并不相同std::vector<const char*>
(虽然两者都表示字符串),因为一个存储字符串,另一个存储指向以空字符结尾的字符串的指针。那么,您将如何从设计的角度解决这个问题呢?
好吧,你要么忽略这种类型的问题,要么阻止使用这种类型,或者编写一个专门化,使这个容器对这种类型以不同的方式工作,以达到你的设计目的。同样,根据您要解决的问题,为您的函数编写一个专业化。
因此,这些模板专业化是为了解决特定类型的问题。如果您不需要它,请不要使用它。您无需无缘无故地使代码复杂化。
推荐阅读
- android - android studio中线性布局的高度
- azure - Azure 中基于资源的策略
- javascript - 如何使用 jQuery 查找具有特定名称的下一个输入并获取其值?
- azure-devops-server-2019 - Azure DevOps 服务器 2019 更新 1.1。无法分离集合。收藏现在“离线”,无法“在线”
- spring-boot - Spring Boot YAML 配置文件配置文件
- android - 后台应用程序可以监听当前显示的前台应用程序是什么
- java - Android ImageView 选择标记
- python - 为具有不同键的数据处理或跳过 PathError?
- reactjs - 使用 JSX 内容反应轮播类型功能
- google-app-engine - App Engine 的设置中不显示每日支出限制选项