fork(1) download
  1. #include <iostream>
  2. #include <string>
  3.  
  4. template< typename T >
  5. class Invoker
  6. {
  7. public:
  8. Invoker() = default;
  9. virtual ~Invoker() = default;
  10.  
  11. public:
  12. template <typename R, typename ... Args1, typename ... Args2>
  13. static R invoke( T* object, R( T::* method )( Args1... ), Args2&&... args );
  14. };
  15.  
  16. template <typename T>
  17. template <typename R, typename ... Args1, typename ... Args2>
  18. R Invoker<T>::invoke(T* object, R( T::* method)(Args1...), Args2&&... args)
  19. {
  20. return ( object->*method )( std::forward<Args1>( args )... );
  21. }
  22.  
  23.  
  24. struct Foo
  25. {
  26. int bar( const std::string& txt )
  27. {
  28. return 42;
  29. }
  30. };
  31.  
  32. int main()
  33. {
  34. Foo foo;
  35.  
  36. auto result = Invoker<Foo>::invoke( &foo, &Foo::bar, std::string() );
  37. std::cout << result; // 42
  38.  
  39. return 0;
  40. }
Success #stdin #stdout 0s 3412KB
stdin
Standard input is empty
stdout
42