函数模板c ++的显式特化

时间:2016-07-28 17:39:47

标签: c++ templates function-templates explicit-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)
{
    char a = toupper(testValue);
    char b = toupper(minimum);
    char c = toupper(maximum);
    return a >= b && a <= c;
}

这是函数模板,在调用main函数的validate中以某种方式,它永远不会使用第二个函数(const char&的函数),即使参数为{{1} }}。谁能看到我的问题在哪里?

1 个答案:

答案 0 :(得分:6)

您专门针对的类型 - const char&与传递Tchar推断的类型不一致 - 它推导为char

(模板类型参数只能在存在通用引用的情况下推断为引用)

所以,

template <> 
bool validate<char> ...

无论如何,你为什么不过载呢?