C++ (Qt)class Wrapper : public std::reference_wrapper<RGB_Float> {};
C++ (Qt)void DrawBuffer( RGB_Float * buf, int width, int height );
C++ (Qt)void DrawBuffer( const std::vector<RGBReal> &buf, int width, int height );
C++ (Qt)class PixBuffer{public: RGBReal &at( int x, int y ); const RGBReal &at( int x, int y ) const;} void DrawBuffer( const PixBuffer &buf, int width, int height );
C++ (Qt)typedef struct { RGB_Float * mBufferBase; // данные буфера (3 float на точку) // здесь десяток членов - простых типов SInt32 mFrame; ... C_Rect mBufferRect; // SDK структура - самописный rectangle C_Matrix mMatrix; // SDK структура - самописная матрица 4х4 // здесь опять десяток простых double mTime; ... } DrawBufferRec, * DrawBufferPtr;
C++ (Qt)SInt32 DrawBuffer( DrawBufferPtr theBuffer ); // мой код должен быть в этом вызове API
C++ (Qt)// Рендер - может генерировать DrawBufferclass Renderer{public: DrawBuffer run( ... ); // В run используется C-API, возвращает же она уже C++ объект.}; // Рисовальщик - умеет его выводить на всякие разностиclass Drawer{public: void draw( const DrawBuffer &buf );}; // Буфер - сам буферclass DrawBuffer{public: DrawBuffer( int w, int h ); private: DrawBuffer( DrawBufferPtr ); // Прячем конструктор, который умеет создавать объект из C-структуры friend class Renderer; // Даем возможность методу Renderer::run использовать спрятанный конструктор для создания объектов из C-структуры}
C++ (Qt)// Буфер - сам буферclass DrawBuffer{ ... DrawBuffer( DrawBufferPtr ); // Прячем конструктор, который умеет создавать объект из C-структуры ...}
C++ (Qt)DrawBuffer::DrawBuffer( DrawBufferPtr ptr ) : m_drawBuffer( ptr ){} DrawBuffer::DrawBuffer( int w, int h ) : m_drawBuffer( new DrawBufferRec ){ m_drawBuffer->width = w; m_drawBuffer->height = h;}
C++ (Qt)class DrawBuffer{ PixArray m_bufferBase; // Предполагается, что конструктор PixArray умеет конструироваться из указателя на буфер RGB_Floatpublic: DrawBuffer( DrawBufferPtr ptr ) : m_bufferBase( ptr->mbufferBase ) { }}
C++ (Qt)class DrawBuffer_cpp : public DrawBufferRec { ... RGB_Float_cpp * BufferBase( void ) { return (RGB_Float_cpp *) mBufferBase; } Rect_cpp & BufferRect( void ) { return (Rect_cpp &) mBufferRect; } Matrix_cpp & Matrix( void ); { return (Matrix_cpp &) mMatrix; } }