gpt4 book ai didi

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

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:28:02 25 4
gpt4 key购买 nike

我有以下代码:

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 来测试它,但在测试之后,我发现没有调用特化。它调用主模板。我不明白为什么。

最佳答案

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

或将重载定义为非模板:

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

关于C++ - 未调用函数模板特化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32010637/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com