code_junkie

C++ function pointers and classes

Nov 10th, 2011
131
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.27 KB | None | 0 0
  1. void Render(void(*Call)())
  2. {
  3. D3dDevice->BeginScene();
  4. Call();
  5. D3dDevice->EndScene();
  6. D3dDevice->Present(0,0,0,0);
  7. }
  8.  
  9. Render(MainMenuRender);
  10. Render(MainMenu::Render);
  11.  
  12. Render(MainMenu->Render);
  13.  
  14. #include <boost/bind.hpp>
  15. #include <boost/function.hpp>
  16.  
  17. void Render(boost::function0<void> Call)
  18. {
  19. // as before...
  20. }
  21.  
  22. Render(boost::bind(&MainMenu::Render, myMainMenuInstance));
  23.  
  24. void Wrap(T *t)
  25. {
  26. t->Call();
  27. }
  28.  
  29. void Render(void (*f)(T *), T *t)
  30. {
  31. ...
  32. f(t);
  33. ...
  34. }
  35.  
  36. void CallRender(myclass *Instance)
  37. {
  38. Instance->Render();
  39. }
  40.  
  41. void Render(void (*Call)(myclass*), myclass* Instance)
  42. {
  43. ...
  44. Call(Instance);
  45. ...
  46. }
  47.  
  48. Render(CallRender, &MainMenu);
  49.  
  50. ((object).*(ptrToMember))
  51.  
  52. void Render(IRenderer *Renderer)
  53. {
  54. D3dDevice->BeginScene();
  55. Renderer->Render();
  56. D3dDevice->EndScene();
  57. D3dDevice->Present(0,0,0,0);
  58. }
  59.  
  60. // The "interface"
  61. public class IRenderer
  62. {
  63. public:
  64. virtual void Render();
  65. };
  66.  
  67. public class StaticCaller: public IRenderer
  68. {
  69. void (*Call)();
  70. public:
  71.  
  72. StaticCaller((*Call)())
  73. {
  74. this->Call = Call;
  75. }
  76.  
  77. void Render()
  78. {
  79. Call();
  80. }
  81. };
  82.  
  83. typedef void (T::*FUNCTIONPOINTERTYPE)(args..)
  84. FUNCTIONPOINTERTYPE function;
  85.  
  86. T* t;
  87. FUNCTIONPOINTERTYPE function;
  88. (t->*function)(args..);
Add Comment
Please, Sign In to add comment