fork download
  1. #include <iostream>
  2. using namespace std;
  3.  
  4. enum AType
  5. {
  6. a1 = 1, a2
  7. };
  8.  
  9. class B
  10. {
  11. public:
  12. virtual ~B() = default;
  13. public:
  14. virtual int f() const = 0;
  15. };
  16.  
  17. class A1: public B
  18. {
  19. virtual int f() const override
  20. {
  21. return 1;
  22. }
  23. };
  24. class A2: public B
  25. {
  26. virtual int f() const override
  27. {
  28. return 2;
  29. }
  30. };
  31.  
  32. void executeF(void* aPtr, AType aType, int* result)
  33. {
  34. B* bPtr = nullptr;
  35. switch(aType)
  36. {
  37. case a1:
  38. bPtr = static_cast<A1*>(aPtr);
  39. break;
  40. case a2:
  41. bPtr = static_cast<A1*>(aPtr);
  42. break;
  43. default:
  44. break;
  45. }
  46.  
  47. if(bPtr)
  48. *result = bPtr->f();
  49. }
  50.  
  51. int main() {
  52. A1* a1Ptr = new A1();
  53. A2* a2Ptr = new A2();
  54.  
  55. void* a1VoidPtr = a1Ptr;
  56. void* a2VoidPtr = a2Ptr;
  57.  
  58. int res(0);
  59. executeF(a1VoidPtr, AType::a1, &res);
  60. cout << res << endl;
  61. executeF(a2VoidPtr, AType::a2, &res);
  62. cout << res << endl;
  63.  
  64. return 0;
  65. }
Success #stdin #stdout 0s 15240KB
stdin
Standard input is empty
stdout
1
2