由于C ++标准库通常为其类提供重载运算符,我想知道为什么存在比较函数(实际上不是函数,而是使用重载() - 运算符的结构)但是没有std :: ratio类的比较运算符( ES)。
我认为他们会提供更好的使用和可读性,也可以在编译时执行。
即使他们的特定解决方案需要使用结构进行模板元编程,将其包装到另一个函数中应该没有问题:
template<intmax_t N1, intmax_t D1, intmax_t N2, intmax_t D2>
constexpr bool operator==(const ratio<N1, D1>& first, const ratio<N2, D2>& second) {
return ratio_equal<ratio<N1,D1>, ratio<N2,D2>>();
}
实际上对我有用,并且可以很容易地被所有其他运营商采用
所以我错过了什么,或者有人知道为什么他们决定不支持这里的运营商?
答案 0 :(得分:1)
最有可能在撰写提案N2661时回复,constexpr尚未存在。我发现constexpr的第一次出现是在N2235,所以很可能至少没有编译器实现它,并且可能甚至不确定它将在未来的标准中考虑。 这只是一个猜测,甚至可能不值得这个答案。
答案 1 :(得分:1)
ratio
类不是为了实例化而设计的;它没有数据成员,因此基于它的任何对象都不包含类类型本身之外的任何信息。由于必须针对对象而不是类型调用运算符,因此提供它们是没有意义的。它甚至会适得其反,因为它意味着实例化这个类会很有用。
如果你真的需要运行时对象而不是编译时类型,我建议<div class="pages">
<ul>
<li class="prev">
<a href="#"><span>previous</span></a>
</li>
<li class="pagination-page-numbers">
<a href="#"><span>1</span></a>
</li>
<li class="pagination-page-numbers">
<a href="#"><span>2</span></a>
</li>
<li class="pagination-page-numbers on">
<a href="#"><span>3</span></a>
</li>
<li class="next">
<span><span>next</span></span>
</li>
</ul>
</div>
可能不是合适的选择。