27 Ağustos 2018 Pazartesi

std::ratio Sınıfı

Giriş
Şu satırı dahil ederiz.
#include <ratio>
Constructor - Bölünen
Bölen 1 kabul edilir. Şöyle yaparız.
using Zero = ratio<0>;
using One = ratio<1>;
Constructor - Bölen + bölünen
Şöyle yaparız. 1 / 2 anlamına gelir.
std::ratio<1, 2> foo;
ratio_greater_equal
Örnek ver

ratio_divide
Örnek ver

ratio_multiply
Örnek ver

Örnek
Elimizde şöyle bir kod olsun.
/* "Strong" speed type, unit is always [m/s]. */
struct Speed {
   long double value;
};

/* "Strong" length type, parameterized by a unit as multiples of [m]. */    
template <class Period = std::ratio<1>> struct Length {
   unsigned long long value;
};
Length yapısını ilklendirmek için elimizde şöyle bir kod olsun.
#include <ratio>

auto operator ""_m(unsigned long long n)
{
   return Length<>{n};
}

auto operator ""_km(unsigned long long n)
{
   return Length<std::kilo>{n};
}
Şöyle yaparız.
/* We use auto here, because the suffix is so crystal clear: */
const auto lengthInMeter = 23_m;
const auto lengthInKilometer = 23_km;
Diğer
Bu sınıfı kendimiz yazsaydık şöyle yapardık.
class Fraction {
  int numerator{}, denominator{};
public:

  Fraction() = default;
  Fraction(int n, int d):
        numerator(n), denominator(d) {}
  ~Fraction() = default;

  void set_num(int value) { numerator = value; }
  void set_den(int value) { denominator = value; }
  int get_num() const { return numerator; }
  int get_den() const { return denominator; }

  ...

};

Hiç yorum yok:

Yorum Gönder