函数模板 c++ 的显式特化
explicit specialization for function template c++
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
函数时,即使参数是char
。谁能看出我的问题出在哪里?
你特化的类型 - const char&
与你传递 char
时 T
推导出的不匹配 - 它推导出 char
!
(模板类型参数只能在存在通用引用的情况下推导出引用)
所以,
template <>
bool validate<char> ...
无论如何,你为什么不超载呢?
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
函数时,即使参数是char
。谁能看出我的问题出在哪里?
你特化的类型 - const char&
与你传递 char
时 T
推导出的不匹配 - 它推导出 char
!
(模板类型参数只能在存在通用引用的情况下推导出引用)
所以,
template <>
bool validate<char> ...
无论如何,你为什么不超载呢?