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

Template function that can compare different data types c++

本文关键字:函数 c++ 数据类型 比较      更新时间:2023-10-16

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

我有一些代码:

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

那么,如何正确实现此功能呢?

您可以专门化字符串的模板:

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