fork(2) download
  1. #include <iostream>
  2. #include <type_traits>
  3.  
  4. template< typename R, typename C, typename... Args>
  5. class delegate
  6. {
  7. public:
  8. template<R(C::*F)(Args...), typename ... Ts>
  9. struct adapter
  10. {
  11. static R invoke_no_fwd(Args... args)
  12. {
  13. C t((Ts::value)...);
  14. return (t.*F)(args...);
  15. }
  16. };
  17. };
  18.  
  19. class Class
  20. {
  21. public:
  22. Class(const char* psz) {
  23. std::cout << psz << std::endl;
  24. }
  25. void print(int v)
  26. {
  27. std::cout << "Class: " << v << std::endl;
  28. }
  29. };
  30.  
  31. struct X
  32. {
  33. static const char* value;
  34. };
  35.  
  36. const char* X::value = "ABC";
  37.  
  38. int main()
  39. {
  40. typedef void(*function_t)(int);
  41. function_t ptrFunc = delegate<void, Class, int>::adapter<&Class::print, X>::invoke_no_fwd;
  42. ptrFunc(-42); // 0
  43.  
  44. return 0;
  45. }
  46.  
Success #stdin #stdout 0s 3344KB
stdin
Standard input is empty
stdout
ABC
Class: -42