我需要编写一个可以比较整数,字符和字符串的模板函数,但是有一个条件:字符串必须按它们的长度进行比较。
我有一些代码:
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() ? true : false;
替换了第6行,但如果我比较非字符串数据,则会出错:C2228 left of '.length' must have class/struct/union
那么,我该如何正确实现这个功能呢?
答案 0 :(得分:3)
您可以专门设置字符串模板:
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);
}