C++ Standart Kitaplığı normalde sınıfları için aşırı yüklenen operatörler sağladığından, karşılaştırma fonksiyonlarının (aslında gerçekten fonksiyonlar değil, aşırı yüklü() -operator içeren yapılar) neden olduğunu merak ettim, ancak std :: ratio sınıfı için karşılaştırma operatörleri yok.).std :: ratio neden karşılaştırma operatörlerini desteklemiyor?
Görüşüm, çok daha iyi bir kullanım ve okunabilirlik sağlarlar ve derleme zamanında da gerçekleştirilebilirler.
bile hiçbir sorun olması gerektiğini gibi başka bir işleve içine sararak, kullanarak.Gerçeği şablon metaprogramming gerekir kendi özel çözüm:
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>>();
}
Aslında benim için çalışıyor ve tüm diğer operatörler için kolayca adapte edilebilir Ayrıca
Bu yüzden bir şeyleri özlüyorum ya da neden operatörleri desteklememeye karar verdiğine dair bir fikriniz var mı?
Oranları şablon parametresi olarak değil, nesne olarak ne sıklıkla kullanıyorsunuz? – Barry
Aslında bu gerçekten iyi bir nokta, ama yine de yukarıdaki özelliği uygulamamasının bir nedeni değil. –
Karşılaştırma için oranın kesinliğini korumak, kullanılan int türünü sessiz bir şekilde taşabilen payların ve paydaların çapraz çoğaltılmasını gerektirir. –