C++ (Qt)template <class R, class T>R color_cast(T); template <>Color color_cast<Color, rgbF>(rgbF clr){ return /* перегоняем rgbF в Color */;} template <>rgbF color_cast<rgbF, Color>(Color clr){ return /* перегоняем Color в rgbF */;} template <>Color color_cast<Color, Color>(Color clr){ return clr;} template <>rgbF color_cast<rgbF, rgbF>(rgbF clr){ return clr;}
C++ (Qt)template <class R, class T>R some_color_function(T clr1, T clr2){ rgbF c1 = color_cast<rgbF>(clr1); rgbF c2 = color_cast<rgbF>(clr2); ... return color_cast<R>(....); }
C++ (Qt)return c1 * (1 - w) + c2 * w;
C++ (Qt)rgbF operator + ( const rgbF & c, const rgbF & c );rgbF operator * ( const Color & c, float t );
C++ (Qt)rgbF::operator Color( void );
C++ (Qt)Color operator + ( const rgbF & c, const rgbF & c );
C++ (Qt)template <class R, class T>R some_color_function(T clr1, T clr2, float w){ rgbLibF c1 = color_cast<rgbLibF>(clr1); rgbLibF c2 = color_cast<rgbLibF>(clr2); rgbLibF result = c1 * (1 - w) + c2 * w; // Все вычисления выполняются с rgbLibF return color_cast<R>( result ); // Кастуем в нужный тип, например это будет Color.}
C++ (Qt)template <class R, class T>R color_cast(T); template <>Color color_cast<Color, Color>(Color clr) // Принимает и возвращает Color{ return clr;} template <>rgbF color_cast<rgbF, rgbF>(rgbF clr) // Принимает и возвращает rgbF{ return clr;} template <>rgbF color_cast<rgbF, float>(float clr) // кастуем float в rgbF{ return /* */;} template <>Color color_cast<Color, float>(float clr) // кастуем float в Color{ return /* */;} template <>Color color_cast<Color, rgbF>(rgbF clr) // Кастует rgbF в Color{ return /* перегоняем rgbF в Color */;} template <>rgbF color_cast<rgbF, Color>(Color clr){ return /* перегоняем Color в rgbF */;}
C++ (Qt)return some_color_function(c1, c2, w);
C++ (Qt)template <class T>T DoCalc( const T & c1, const T & c2, float w ){ return c1 * (1 - w) + c2 * w;} template <>Color DoCalc( const Color & c1, const Color & c2, float w ){ rgbLibF c1 = Color2rgbLibF(clr1); rgbLibF c2 = Color2rgbLibF((clr2); rgbLibF result = c1 * (1 - w) + c2 * w; // Все вычисления выполняются с rgbLibF return rgbLibF2Color(result); }
C++ (Qt)return (c1 * w1 + c2 * w2) / (w1 + w2);
C++ (Qt)Color clr = color_cast<Color>(123.f);Color clr2 = color_cast<Color>(rgbF());rgbF clr3 = color_cast<rgbF>(Color()); и т.д.
C++ (Qt)template <class R, class T>R combine_color(T c1, T c2, float w){ rgbLibF c1 = color_cast<rgbLibF>(clr1); rgbLibF c2 = color_cast<rgbLibF>(clr2); return color_cast<R>( c1 * (1 - w) + c2 * w ); } template <class R, class T>R other_combine_color(T c1, T c 2, float w1, float w2){ rgbLibF c1 = color_cast<rgbLibF>(clr1); rgbLibF c2 = color_cast<rgbLibF>(clr2); return color_cast<R>( (c1 * w1 + c2 * w2) / (w1 + w2) ); } и т.д..