gpt4 book ai didi

c++ - C++ 中 string 和 int 的函数模板

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:04:33 26 4
gpt4 key购买 nike

我想要一个函数模板,它接受一个 vector 和一个元素,并返回该元素在 vector 中的位置。我希望此函数适用于 int 和 std::string 类型。这是函数模板定义:

template<class T>
int findElement(const vector<T> &vec, const T &ele)
{
for(size_t i = 0; i < vec.size(); i++)
{
if(typeid(ele) == typeid(std::string))
{
if(ele.compare(vec[i]) == 0)
return i;
}
else
{
if(ele == vec[i])
return i;
}
}
return -1;
}

如您所见,我最初正在检查类型,以便我可以使用适当的比较方法。当我使用 std::string 类型参数调用时,这工作正常,但当我将它与 double 类型一起使用时,它会出现以下错误:

 error C2228: left of '.compare' must have class/struct/union

see reference to function template instantiation 'int findElement<double>(const std::vector<_Ty> &,const T &)' being compiled

我该如何解决这个问题?

谢谢,拉克什。

最佳答案

在使用模板时,您应该永远不必检查typeidstd::string 以预期的方式定义了 ==,所以请使用它!

template<class T>
int findElement(const vector<T> &vec, const T &ele)
{
for(size_t i = 0; i < vec.size(); i++)
{
if(ele == vec[i])
return i;
}
return -1;
}

一般来说,如果您需要为特定类型特化模板函数,请使用模板特化:

template<class T>
int findElement(const vector<T> &vec, const T &ele) {
for(size_t i = 0; i < vec.size(); i++) {
if(ele == vec[i])
return i;
return -1;
}

template<>
int findElement<std::string>(const vector<std::string> &vec, const std::string &ele) {
for(size_t i = 0; i < vec.size(); i++) {
if(ele.compare(vec[i]) == 0)
return i;
}
return -1;
}

关于c++ - C++ 中 string 和 int 的函数模板,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16184885/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com