C++ - 未调用函数模板特化

Mat*_*lke 4 c++ templates function character specialization

我有以下代码:

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));
}
Run Code Online (Sandbox Code Playgroud)

第一个模板用于任何输入的类型,专门化用于文字字符.代码编译并运行main.cpp来测试它,但经过测试,我发现没有调用特化.它调用主模板.我无法弄清楚为什么.

Pio*_*cki 7

template <> bool validate<const char&>专业化由编译器时类型模板参数拾取T从主模板推导出式或显式指定为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));
}
Run Code Online (Sandbox Code Playgroud)

或者将重载定义为非模板:

bool validate(char minimum, char maximum, char testValue)
{
    return validate(toupper(minimum), toupper(maximum), toupper(testValue));
}
Run Code Online (Sandbox Code Playgroud)