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

时间:2017-06-20 15:10:38

标签: c++ templates

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

我有一些代码:

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

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

1 个答案:

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