C++ - 未调用函数模板专业化

C++ - Function template specialization not being called

我有以下代码:

template<typename T>
bool validate(const T& minimum, const T& maximum, const T& testValue)
{
    return testValue >= minimum && testValue <= maximum;
}

template<>
bool validate<const char&>(const char& minimum, const char& maximum, const char& testValue)
{
    // Allows comparisons with char arguments, ignoring case    
    // Localize by calling previously defined function
    return validate(toupper(minimum), toupper(maximum), toupper(testValue));
}

第一个模板用于任何输入类型,专门用于文字字符。代码编译并运行 main.cpp 来测试它,但在测试之后,我发现没有调用特化。它调用主模板。我不明白为什么。

当来自主模板的类型模板参数 T 被推导或明确指定为 const char& 时,编译器会选择 template <> bool validate<const char&> 特化。对于调用 validate('a', 'b', 'c')T 被推断为 char,这与专业化的预期不符。

要么为 char(即不是 const char&)提供专业化:

template <>
bool validate<char>(const char& minimum, const char& maximum, const char& testValue)
{
    return validate(toupper(minimum), toupper(maximum), toupper(testValue));
}

或将重载定义为非模板:

bool validate(char minimum, char maximum, char testValue)
{
    return validate(toupper(minimum), toupper(maximum), toupper(testValue));
}