ChipMaster's trial hacks on C++CMS starting with v1.2.1. Not sure I'll follow on with the v2 since it looks to be breaking and mostly frivolous.
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

74 lines
2.0 KiB

  1. #ifndef CPPCMS_UTIL_MEM_BIND_H
  2. #define CPPCMS_UTIL_MEM_BIND_H
  3. namespace cppcms { namespace util {
  4. namespace details {
  5. template<typename C,typename P>
  6. struct binder0 {
  7. void (C::*member)();
  8. P object;
  9. void operator()() { ((*object).*member)(); }
  10. };
  11. template<typename C,typename P,typename P1>
  12. struct binder1 {
  13. void (C::*member)(P1);
  14. P object;
  15. void operator()(P1 p1) { ((*object).*member)(p1); }
  16. };
  17. template<typename C,typename P,typename P1,typename P2>
  18. struct binder2 {
  19. void (C::*member)(P1,P2);
  20. P object;
  21. void operator()(P1 p1,P2 p2) { ((*object).*member)(p1,p2); }
  22. };
  23. template<typename C,typename P,typename P1,typename P2,typename P3>
  24. struct binder3 {
  25. void (C::*member)(P1,P2,P3);
  26. P object;
  27. void operator()(P1 p1,P2 p2,P3 p3) { ((*object).*member)(p1,p2,p3); }
  28. };
  29. template<typename C,typename P,typename P1,typename P2,typename P3,typename P4>
  30. struct binder4 {
  31. void (C::*member)(P1,P2,P3,P4);
  32. P object;
  33. void operator()(P1 p1,P2 p2,P3 p3,P4 p4) { ((*object).*member)(p1,p2,p3,p4); }
  34. };
  35. }
  36. template<typename C,typename P>
  37. details::binder0<C,P> mem_bind(void (C::*mem)(),P obj)
  38. {
  39. details::binder0<C,P> tmp={mem,obj};
  40. return tmp;
  41. }
  42. template<typename C,typename P,typename P1>
  43. details::binder1<C,P,P1> mem_bind(void (C::*mem)(P1),P obj)
  44. {
  45. details::binder1<C,P,P1> tmp={mem,obj};
  46. return tmp;
  47. }
  48. template<typename C,typename P,typename P1,typename P2>
  49. details::binder2<C,P,P1,P2> mem_bind(void (C::*mem)(P1,P2),P obj)
  50. {
  51. details::binder2<C,P,P1,P2> tmp={mem,obj};
  52. return tmp;
  53. }
  54. template<typename C,typename P,typename P1,typename P2,typename P3>
  55. details::binder3<C,P,P1,P2,P3> mem_bind(void (C::*mem)(P1,P2,P3),P obj)
  56. {
  57. details::binder3<C,P,P1,P2,P3> tmp={mem,obj};
  58. return tmp;
  59. }
  60. template<typename C,typename P,typename P1,typename P2,typename P3,typename P4>
  61. details::binder4<C,P,P1,P2,P3,P4> mem_bind(void (C::*mem)(P1,P2,P3,P4),P obj)
  62. {
  63. details::binder4<C,P,P1,P2,P3,P4> tmp={mem,obj};
  64. return tmp;
  65. }
  66. } } // cppcms::util
  67. #endif