C delegate to C++ -
i have small problem using library gets images cmos camera. library permits use stream functionality , have 3 access point set (three delegates) when image, when image dropped , when there error.
typedef void(* streamcallbackptr)( image *image ); typedef void(* streamerrorcallbackptr)(); typedef void(* streamframedroppedcallbackptr)(); int stream_start( device device, imageformat format, streamcallbackptr stream_callback, streamframedroppedcallbackptr f_dropped_callback, streamerrorcallbackptr error_callback ); i enter streamcallbackptr image ready on camera, keep in mind not have ways of changing library code.
and here question: how plug own delegate in c++ ? lets use stream functionality inside class, know have @ least 2 options; wrapper, , global variables. first 1 seems compromised since cannot pass else image, , want avoid using global variables (it static members in case).
any ideas ?
you use static member function streamcallbackptr can access private static reference or list of references c++ delegates wish receive message.
that way have hidden of details private class.
the code below pseudo-c++ (i haven't checked properly) should give idea of suggesting.
class delegate { protected: void callback( image *image ) = 0; void error() = 0; void framedropped() = 0; public: static void setdelegate(delegate* d) { delegateinstance = d; } static void staticcallback( image *image) { // invoke delegate instance if (delegateinstance != nullptr) delegateinstance->callback(); } // same others... private: static delegate* delegateinstance = nullptr; }; class myclass : public delegate { protected: void callback( image *image ) { // callback in delegate instance } }; int main(void) { myclass mc; delegate::setdelegate(&mc); streamcallbackptr scp = &delegate::staticcallback; // register other static callbacks... return 0; }
Comments
Post a Comment