fork(1) download
  1. #include <functional>
  2. #include <iostream>
  3.  
  4. template <class... CALLARGS>
  5. class Closure{
  6. public:
  7.  
  8. template <class OBJ, typename M, class... CAPARGS>
  9. Closure(OBJ* obj, M (OBJ::*fct), CAPARGS... capArgs){
  10. callback =
  11. [=] (CALLARGS... callArgs) -> void{
  12. (obj->*fct)(capArgs..., callArgs...);
  13. };
  14. }
  15.  
  16. template <typename F, class... CAPARGS>
  17. Closure(F fct, CAPARGS... capArgs){
  18. callback =
  19. [=] (CALLARGS... callArgs) -> void{
  20. fct(capArgs..., callArgs...);
  21. };
  22. }
  23.  
  24. void operator () (CALLARGS... callArgs){
  25. callback(callArgs...);
  26. }
  27.  
  28. private:
  29. std::function<void(CALLARGS...)> callback;
  30. };
  31.  
  32. class A{
  33. public:
  34. void fct(int a){ std::cout << "A::fct " << a << std::endl; }
  35. };
  36.  
  37. void plusF(int a){std::cout << "plusF " << a << std::endl;}
  38.  
  39. int main(void) {
  40. A a;
  41.  
  42. Closure<int> callF(plusF);
  43. Closure<int> callA(&a, &A::fct);
  44.  
  45. callF(1);
  46. callA(2);
  47.  
  48. }
Success #stdin #stdout 0s 3460KB
stdin
Standard input is empty
stdout
plusF 1
A::fct 2