如何解决为什么is_integral_v <string>为true?
我想这个问题的标题没有多大意义,但我希望问题描述能引起大家的注意。
有人可以解释一下这到底是如何通过编译的吗?
parameter sharing
原始版本为:template<typename Cont,typename = std::enable_if<std::is_integral_v<std::string>>>
void print(const Cont& cont)
{
for (const auto it : cont) {
cout << it << " ";
}
cout << endl;
}
int main()
{
std::vector<string> V;
print(V);
}
我只是明确地输入了std :: string来确定。
我想enable_if应该禁止完全实例化此功能??
我在这里想念什么?
解决方法
std::enable_if<false>
仍然存在作为一种类型,这就是推断出未使用的type参数的原因。
它只是以本身没有嵌套的公共成员typedef type
的类型存在。因此,您必须使用std::enable_if<EXPR>::type
或std::enable_if_t<EXPR>
才能获得预期的行为。
您可以在the documentation中看到完全符合您的用例的示例。
只是为了完整性:
为什么is_integral_v是真实的?
不是!您只是没有检查自己的想法。
将来,当您陷入这样的困境(当您真正知道要写的内容时,真的可能很难发现错误)时,请尝试寻找另一种方法来检验您的假设。您可以只打印is_integral_v<std::string>
并查看它是真是假。
或者,当然,请其他人看看。其他人经常可以马上看到我们的大脑过滤掉的错误。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。