作者热门文章
- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我有以下代码:
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/
关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。 我们不允许提问寻求书籍、工具、软件库等的推荐。您可以编辑问题,以便用事实和引用来回答。 关闭 4 年前。
正如您在 this travis.yml 中看到的那样文件,我的代码依赖于一些第三方库,我在构建项目之前将它们安装在远程系统上。 Travis 每次推送提交时都会下载并构建这些库,这可以避免吗?我的意
我是一名优秀的程序员,十分优秀!