【发布时间】:2016-04-07 20:30:28
【问题描述】:
由于 C++ 标准库通常为其类提供重载运算符,我想知道为什么有比较函数(实际上不是真正的函数,而是具有重载 () 运算符的结构)但 std::ratio 类没有比较运算符(埃斯)。
我认为它们会提供更好的使用和可读性,并且也可以在编译时执行。
即使他们的特定解决方案需要使用结构进行模板元编程,将其包装到另一个类似的函数中应该没问题:
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>>();
}
实际上对我有用,也可以很容易地被所有其他操作员采用
那么我是否遗漏了什么,或者有人知道他们为什么决定不在这里支持运营商?
【问题讨论】:
-
您多久使用比率作为对象而不是模板参数?
-
其实这是一个很好的观点,但仍然不是不实现上述功能的原因。
-
保持比率的准确性以进行比较需要分子和分母的交叉乘法,这可能会悄悄地溢出正在使用的 int 类型。
-
是的,但提供的函数也可能发生这种情况(实际上它们是我知道的带有重载 () 运算符的结构),不是吗?并且包装提供的任何解决方案都不应该改变行为。