首页 > 解决方案 > 函数重载和模板函数有什么区别?哪个更合适?

问题描述

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);
}

如果我们可以使用函数重载来专门化代码,那为什么还需要模板专门化呢?

标签: c++templatesoverloadingtemplate-specialization

解决方案


因为根据用例,您有时会编写通用的容器/函数,即它们适用于每种类型。比如说std::vectorstd::vector<string>但是,当您使用and时,向量的含义并不相同std::vector<const char*>(虽然两者都表示字符串),因为一个存储字符串,另一个存储指向以空字符结尾的字符串的指针。那么,您将如何从设计的角度解决这个问题呢?

好吧,你要么忽略这种类型的问题,要么阻止使用这种类型,或者编写一个专门化,使这个容器对这种类型以不同的方式工作,以达到你的设计目的。同样,根据您要解决的问题,为您的函数编写一个专业化。

因此,这些模板专业化是为了解决特定类型的问题。如果您不需要它,请不要使用它。您无需无缘无故地使代码复杂化。


推荐阅读