Don't like ads? PRO users don't see any ads ;-)
Guest

Untitled

By: a guest on Aug 1st, 2012  |  syntax: None  |  size: 1.13 KB  |  hits: 9  |  expires: Never
download  |  raw  |  embed  |  report abuse  |  print
Text below is selected. Please press Ctrl+C to copy to your clipboard. (⌘+C on Mac)
  1. functors   member pointers to create signal object
  2. // signal supporter parent
  3. class signalable {};
  4.  
  5. template <class typeT = signalable>
  6. typedef void (typeT::*trig)(std::string);
  7.  
  8. template <class typeT = signalable>
  9. class trigger
  10. {
  11.     private:
  12.         typeT* instance;
  13.         typeT::trig fun;
  14.  
  15.     public:
  16.         trigger(typeT* inst, typeT::trig function)
  17.             : instance(inst), fun(function)
  18.         {}
  19.         void operator ()(std::string param)
  20.         {
  21.             (instance->*fun)(param);
  22.         }
  23. };
  24.        
  25. #include <string>
  26. #include <iostream>
  27.  
  28. // signal supporter parent
  29. class signalable
  30. {
  31. public:
  32.     void foo(std::string s) { std::cout << "hello: " << s << std::endl; }
  33. };
  34.  
  35.  
  36. template <class typeT = signalable>
  37. class trigger
  38. {
  39.  
  40.     typedef void (typeT::*trig)(std::string);
  41.  
  42.     private:
  43.         typeT* instance;
  44.         trig fun;
  45.  
  46.     public:
  47.         trigger(typeT* inst, trig function)
  48.             : instance(inst), fun(function)
  49.         {}
  50.         void operator ()(std::string param)
  51.         {
  52.             (instance->*fun)(param);
  53.         }
  54. };
  55.  
  56. int main()
  57. {
  58.     signalable s;
  59.     trigger<> t(&s, &signalable::foo);
  60.     t("world");
  61. }