fork download
  1. #include <iostream>
  2.  
  3. enum types { INTEGER, DOUBLE, BOOL, STRING };
  4.  
  5. class Descriptor {
  6.  
  7. public:
  8. Descriptor(types type):
  9. _type{type}
  10. {}
  11. types &type() { return _type; }
  12.  
  13.  
  14. virtual ~Descriptor() = default;
  15.  
  16. private:
  17. types _type;
  18. };
  19.  
  20. class Number: public Descriptor {
  21.  
  22. public:
  23. Number(types descType):
  24. Descriptor(descType)
  25. {}
  26.  
  27. virtual ~Number() = default;
  28.  
  29. int intValue;
  30. };
  31.  
  32.  
  33. void printValue(Descriptor &t) {
  34.  
  35. auto cast = dynamic_cast<Number *>(&t);
  36. if (cast == nullptr) {
  37. std::cout << "Err" << std::endl;
  38. } else {
  39. std::cout << "Works" << std::endl;
  40. }
  41. }
  42.  
  43.  
  44. int main() {
  45.  
  46. Number t = Number(INTEGER);
  47. t.intValue = 1;
  48.  
  49. printValue(t);
  50. }
  51.  
Success #stdin #stdout 0s 15240KB
stdin
Standard input is empty
stdout
Works