#ifndef RGB_H_ #define RGB_H_ namespace meow{ template class RGB{ protected: T rgb_[3]; RGB(); RGB(T const& r, T const& g, T const& b); RGB(T const* rgb); public: virtual ~RGB() { } ///////////////// **# not force #** //////////////// virtual T rMax() const = 0; virtual T rMin() const = 0; virtual T gMax() const = 0; virtual T gMin() const = 0; virtual T bMax() const = 0; virtual T bMin() const = 0; /////////////////// **# access #** ///////////////// T r() const; T g() const; T b() const; T rgb(size_t i) const; T bgr(size_t i) const; /////////////////// **# setting #** //////////////// T r(T const& val); T g(T const& val); T b(T const& val); T rgb(size_t i, T const& val); T bgr(size_t i, T const& val); }; class RGBf: public RGB{ public: RGBf(); RGBf(double const&r,double const&g,double const&b); RGBf(double const* rgb); ~RGBf(); double rMin() const; double rMax() const; double gMin() const; double gMax() const; double bMin() const; double bMax() const; }; class RGBi: public RGB{ public: RGBi(); RGBi(int32_t const&r,int32_t const&g,int32_t const&b); RGBi(int32_t const* rgb); ~RGBi(); int32_t rMin() const; int32_t rMax() const; int32_t gMin() const; int32_t gMax() const; int32_t bMin() const; int32_t bMax() const; }; template inline void RGB_to_RGB(RGB const& a, RGB* b); } #include "RGB.hpp" #endif // RGB_H_