fork download
  1. #include <stdio.h>
  2.  
  3. class A
  4. {
  5. public:
  6. virtual ~A(){}
  7. };
  8.  
  9. class B : public A
  10. {
  11. public:
  12. void Func(void){ printf( "B Func();\n" ); }
  13. };
  14.  
  15. typedef void(A::*A_Callback)(void);
  16.  
  17. class C
  18. {
  19. public:
  20. void SetCallback( A* pA, A_Callback callback )
  21. {
  22. m_pA = pA;
  23. m_Callback = callback;
  24. }
  25. void Do( void )
  26. {
  27. (m_pA->*m_Callback)();
  28. }
  29. A* m_pA;
  30. A_Callback m_Callback;
  31. };
  32.  
  33. int main( void )
  34. {
  35. B b;
  36. C c;
  37. /* error
  38.   c.SetCallback( &b, &B::Func );
  39.   */
  40. c.SetCallback( &b, static_cast<A_Callback>(&B::Func) );
  41. c.Do();
  42. return 0;
  43. }
Success #stdin #stdout 0.02s 2680KB
stdin
Standard input is empty
stdout
B Func();