diff --git a/rational.cpp b/rational.cpp index 433ff432..2da4eeaa 100644 --- a/rational.cpp +++ b/rational.cpp @@ -162,8 +162,20 @@ rational::operator/ (const T rhs) const } -//----------------------------------------------------------------------------- -template struct util::rational; -template struct util::rational< int32_t>; +/////////////////////////////////////////////////////////////////////////////// +template +std::ostream& +util::operator<< (std::ostream &os, util::rational val) +{ + return os << val.n << "/" << val.d; +} -template util::rational util::operator/ (uint32_t, util::rational); + +/////////////////////////////////////////////////////////////////////////////// +#define INSTANTIATE(TYPE) \ +template struct util::rational; \ +template util::rational util::operator/ (TYPE, util::rational); \ +template std::ostream& util::operator<< (std::ostream&, util::rational); + +INSTANTIATE(uint32_t) +INSTANTIATE(int32_t) diff --git a/rational.hpp b/rational.hpp index 04758506..4acfa288 100644 --- a/rational.hpp +++ b/rational.hpp @@ -18,6 +18,7 @@ #define __UTIL_RATIONAL_HPP #include +#include namespace util { template @@ -68,6 +69,11 @@ namespace util { { return rhs * lhs; } + + + /////////////////////////////////////////////////////////////////////////// + template + std::ostream& operator<< (std::ostream&, rational); };