C++0x ratio

C++0x では、有理数(分数)定数である、 std::ratio メタ関数が用意されます。
(レイシオと読みます)

// <ratio>
namespace std {
    template <intmax_t N, intmax_t D = 1>
    class ratio {
    public:
        static const intmax_t num = N;
        static const intmax_t den = D;
    };
} // namespace std

ratio は、 C++0x の DateTime ライブラリである で、時間を表すために使用されて

たとえば、 1/3 秒のようなものを表現できるようになります。


また、 ratio のためには以下のようなものも提供されます。


加減剰余

namespace std {
    template <class R1, class R2> struct ratio_add;
    template <class R1, class R2> struct ratio_subtract;
    template <class R1, class R2> struct ratio_multiply;
    template <class R1, class R2> struct ratio_divide;
} // namespace std


比較

namespace std {
    template <class R1, class R2> struct ratio_equal;
    template <class R1, class R2> struct ratio_not_equal;
    template <class R1, class R2> struct ratio_less;
    template <class R1, class R2> struct ratio_less_equal;
    template <class R1, class R2> struct ratio_greater;
    template <class R1, class R2> struct ratio_greater_equal;
} // namespace std


SI単位に対応するtypedef

namespace std {
    typedef ratio<1, 1000000000000000000000000> yocto;  // conditionally supported
    typedef ratio<1,    1000000000000000000000> zepto;  // conditionally supported
    typedef ratio<1,       1000000000000000000> atto;
    typedef ratio<1,          1000000000000000> femto;
    typedef ratio<1,             1000000000000> pico;
    typedef ratio<1,                1000000000> nano;
    typedef ratio<1,                   1000000> micro;
    typedef ratio<1,                      1000> milli;
    typedef ratio<1,                       100> centi;
    typedef ratio<1,                        10> deci;
    typedef ratio<                       10, 1> deca;
    typedef ratio<                      100, 1> hecto;
    typedef ratio<                     1000, 1> kilo;
    typedef ratio<                  1000000, 1> mega;
    typedef ratio<               1000000000, 1> giga;
    typedef ratio<            1000000000000, 1> tera;
    typedef ratio<         1000000000000000, 1> peta;
    typedef ratio<      1000000000000000000, 1> exa;
    typedef ratio<   1000000000000000000000, 1> zetta;  // conditionally supported
    typedef ratio<1000000000000000000000000, 1> yotta;  // conditionally supported
} // namespace std

については、そのうち調べます。


# GCCとかに入ってたりしないかな



N2661 A Foundation to Sleep On

C++0x言語拡張まとめ