gpt4 book ai didi

c++ - 可以比较不同数据类型的模板函数c++

转载 作者:搜寻专家 更新时间:2023-10-31 01:31:54 26 4
gpt4 key购买 nike

我需要编写一个可以比较整数、字符和字符串的模板函数,但是有一个条件:字符串必须按长度进行比较。

我有一些代码:

template<typename data>
bool compare(data left, data right)
{
if (typeid(left) == typeid(string))
{
return strlen((char*)left) > strlen((char*)right) ? true : false;
}
return left > right ? true : false;
}

当我比较两个字符串时,第 6 行出现错误:C2440 'type cast': cannot convert from 'std::string' to 'char*'

我尝试了另一种方法,我用 return left.length() > right.lenght() 替换了第 6 行? true : false;,但如果我比较非字符串数据,则会出现错误:C2228 left of '.length' must have class/struct/union

那么,如何才能正确实现这个功能呢?

最佳答案

你可以专门为字符串模板:

template<typename data>
bool compare(data left, data right)
{
return left > right;
}

template<>
bool compare(std::string left, std::string right)
{
return left.length() > right.length();
}

也不需要三元运算符。而不是 return left > right ? true : false; 你可以return left > right;

此外,请注意字符字面值是否会退化为指针:compare("Hi", "There"); 会比较指针地址。所以可能还需要以下内容:

template<>
bool compare(const char* left, const char* right)
{
return std::strlen(left) > std::strlen(right);
}

关于c++ - 可以比较不同数据类型的模板函数c++,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44656841/

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