just another simple member function callback implementation 0.0.1

GitHub FLTK Project   FLTK News RSS Feed  
  FLTK Apps      FLTK Library      Forums      Links     Login 
 Back To Listings  ]
 
Category:Wiki/Software/WidgetsRating:
1.66 
Name:just another simple member function callback implementationPopularity:2%
Version:0.0.1License:free for all
Author:interEMail:laGrandeInter1908
Home Page:http://www.fltk.org (605 visits)
Download:ftp://www.fltk.org (626 visits)
Description:

A really simple one, no patch, fast, C++ standard compliant, just include the header.

Sample: class fooWin : public Window, public Slot<fooWin> { .....
    fooWin(...)
    ...
    {
       // for member widget
       slot<&fooWin::funcControlWidget>(barWidget);
       // for this window
       slot<&fooWin::funcControlThisWindow>();
    } }

/*------------------------------fltk/Slot.h--------------------------*/ #ifndef _FLSLOT_H_ #define _FLSLOT_H_

namespace fltk {
  class Widget;
  template<typename windowT>
  class Slot {
  public:
    template<void (windowT::*methodP)()>
    slot() {
      static_cast<windowT*
>(this)->callback(&self_stub<methodP>);
    }
    template<void (windowT::*methodP)() const>
    slot() {
      static_cast<windowT*
>(this)->callback(&self_stub<methodP>);
    }
    template<void (windowT::*methodP)(),typename widgetT>
    slot(widgetT*
widget) {
      widget->callback(&stub<methodP>,static_cast<void*>(this));
    }
    template<void (windowT::*
methodP)() const,typename widgetT>
    slot(widgetT* widget) {
      widget->callback(&stub<methodP>,static_cast<void*
>(this));
    }
    template<void (windowT::*methodP)(),typename widgetT>
    slot(widgetT& widget) {
      widget.callback(&stub<methodP>,static_cast<void*
>(this));
    }
    template<void (windowT::*methodP)() const,typename widgetT>
    slot(widgetT& widget) {
      widget.callback(&stub<methodP>,static_cast<void*
>(this));
    }
  private:
    template<void (windowT::*methodP)()>
    static void self_stub(Widget*
window){
      (static_cast<windowT*>(window)->*methodP)();
    }
    template<void (windowT::*methodP)() const>
    static void self_stub(Widget*
window){
      (static_cast<windowT*>(window)->*methodP)();
    }
    template<void (windowT::*methodP)()>
    static void stub(Widget*
widget,void* window){
      (static_cast<windowT*
>(window)->*methodP)();
    }
    template<void (windowT::*
methodP)() const>
    static void stub(Widget* widget,void* window){
      (static_cast<windowT*>(window)->*methodP)();
    }
  }; }

#endif /* _FLSLOT_H_ */


Articles

Submit Article | View All ]

No articles found.


Comments

Submit Comment ]
 
 

Comments are owned by the poster. All other content is copyright 1998-2020 by Bill Spitzak and others. This project is hosted by The FLTK Team. Please report site problems to 'erco@seriss.com'.