読者です 読者をやめる 読者になる 読者になる

有理数のための分子/分母リテラル

C++

C++0xのユーザー定義リテラルの使い道として
こんなのどうでしょう。
boost::rationalを生成するための、分子と分母を表すリテラルです。

#include <boost/rational.hpp>

template <class I>
class numerator {
    I value_;
public:
    numerator(const I& value)
        : value_(value) {}

    operator I() const
    {
        return value_;
    }
};

template <class I>
class denominator {
    I value_;
public:
    denominator(const I& value)
        : value_(value) {}

    operator I() const
    {
        return value_;
    }
};

template <class I>
boost::rational<I>
    operator/(const numerator<I>& lhs, const denominator<I>& rhs)
{
    return boost::rational<I>(lhs, rhs);
}



numerator<unsigned long long int>
    operator "" _num(unsigned long long int value)
{
    return numerator<unsigned long long int>(value);
}

denominator<unsigned long long int>
    operator "" _den(unsigned long long int value)
{
    return denominator<unsigned long long int>(value);
}


int main()
{
    boost::rational<unsigned long long int> r = 1_num / 3_den; // 1/3
}