C++ (Qt)typedef struct { float r, g, b;} RGB_Float;
C++ (Qt)c2.r = c0.r + c1.r;c2.g = c0.g + c1.g;c2.b = c0.b + c1.b;
C++ (Qt)void DoSomething( some_c_struct * data ){ ... data->colorOut = (data->color1 + data->color2) / 2; // операторы для RGB_float ...}
C++ (Qt)#include <TheirAPIHeader.h> inline const RGB_Float operator+(const RGB_Float& a, const RGB_Float& b) { RGB_Float result = {a.r+b.r, a.g+b.g, a.b+b.b}; return result;}
[quote author=Igors link=topic=24026.msg170464#msg170464 date=1358998401]
C++ (Qt)// хотелось быstruct RGB_Real { RGB_Real( void ) { r = g = b = 0.0f; } float Min( void ) const; float Max( void ) const; float Gray( void ) const;// и.т.д};
C++ (Qt)class RGB_Real : public RGB_Float{public: RGB_Real( void ) { r = g = b = 0.0f; } float Min( void ) const; float Max( void ) const; float Gray( void ) const;};
C++ (Qt)class RGB_Real : public RGB_Float
C++ (Qt)class RGB_Real{public: operator RGB_Float();};
C++ (Qt)class MyRGB { MyRGB() { _rgb.r = _rgb.g = _rgb.b = 0.0f; } MyRGB(const RGB_Float& rgb) : _rgb(rgb) {} ~MyRGB() {} RGB_Float operator RGB_Float() { return reinterpret_cast<RGB_Float&>(*this); }private: RGB_Float _rgb;}
C++ (Qt)class MyRGB {public: MyRGB() { _rgb.r = _rgb.g = _rgb.b = 0.0f; } MyRGB(RGB_Float& rgb) { this = reinterpret_cast<MyRGB*>&rgb; } ~MyRGB() {} RGB_Float& operator RGB_Float&() { return reinterpret_cast<RGB_Float&>(*this); } const RGB_Float& operator RGB_Float&() const { return reinterpret_cast<const RGB_Float&>(*this); }private: RGB_Float _rgb;}
C++ (Qt)extern "C"{#include "rgb_float.h"} class Wrapper: public RGB_Float{public: Wrapper(const RGB_Float &); ...}
C++ (Qt)class Wrapper:{public: Wrapper(const RGB_Float &); ... RGB_Float& data() {} const RGB_Float& data() const {} ...private: RGB_Float m_val;}
C++ (Qt)// void RaiseContract(RGB_Real &); // здесь плюсовый класс для расчетоы..RaiseContract(c_struct->color); // а данные в структуре С..
C++ (Qt)RaiseContract((RGB_Real &) c_struct->color);
C++ (Qt)Wrapper temp(c_struct->color)RaiseContract(temp);c_struct->color = temp.data();