我很好奇,後面爲什麼std::ratio
僅暴露出num
和den
值,而不是一些value
構件推理這將代表可能的形式爲什麼std :: ratio沒有值成員?
static constexpr double value = num/den;
我的比率的合理值,想象它可能是因爲
- 他們可能沒有想在雙鎖定(或任何一個特定的)精密
- 的operati在是微不足道的用戶代碼來執行
- 這可能需要一個討厭的(不安全?)投
但我如果是缺乏標準的單一值成員其他充分的理由感到好奇?
ASSIDE:
有一個實際應用中這對我來說,因爲我希望實現的std::ratio
爲strongly-typed unit library更強類型的版本,我一直在努力,對此我認爲像下面這樣纔有意義(假設我絕不錯過一些瞭解有關std::ratio
和常量性)
template<typename UnitType, std::intmax_t Num, std::intmax_t Denom = 1>
struct unit_ratio : private std::ratio<Num, Denom>
{
static const UnitType value() { return UnitType((double)num/den);
};
在這種情況下,顯然在用戶代碼執行num/den
是不一樣的東西被退回一個UnitType
其中包含值num/den
,但我有點擔心,這是一個壞主意,因爲std::ratio
不會做類似的事情。
是不是因爲浮點數實際上可能不代表日糧? – NathanOliver
@NathanOliver在我看來,它將代表它和'double val =(double)myRatio :: num/myRatio :: den',這是大多數人在代碼中使用它的原因。我通常使用'ratio'來解決模板不能帶非整型非類型成員的事實。 –
double不是一個* rational *值,它是* real *值的近似值。有理數是整數編號的比率。 – Galik