fork download
  1. #include <iostream>
  2. #include <cstdarg>
  3.  
  4. using namespace std;
  5.  
  6. enum types
  7. {
  8. INT,
  9. DOUBLE,
  10. CHAR,
  11. STRING
  12. };
  13.  
  14. struct mt
  15. {
  16. types type;
  17.  
  18. union
  19. {
  20. int i;
  21. double d;
  22. char c;
  23. const char *s;
  24. } val;
  25.  
  26. mt(int i)
  27. : type(INT)
  28. {
  29. val.i = i;
  30. }
  31.  
  32. mt(double d)
  33. : type(DOUBLE)
  34. {
  35. val.d = d;
  36. }
  37.  
  38. mt(char c)
  39. : type(CHAR)
  40. {
  41. val.c = c;
  42. }
  43.  
  44. mt(const char *s)
  45. : type(STRING)
  46. {
  47. val.s = s;
  48. }
  49. };
  50.  
  51. void print(int n, ...)
  52. {
  53. va_list ap;
  54.  
  55. va_start(ap, n);
  56.  
  57. for (int i = 0; i < n; i++)
  58. {
  59. mt x(va_arg(ap, mt));
  60.  
  61. switch (x.type)
  62. {
  63. case INT:
  64. cout << x.val.i << endl;
  65. break;
  66. case DOUBLE:
  67. cout << x.val.d << endl;
  68. break;
  69. case CHAR:
  70. cout << x.val.c << endl;
  71. break;
  72. case STRING:
  73. cout << x.val.s << endl;
  74. break;
  75. }
  76. }
  77.  
  78. va_end(ap);
  79. }
  80.  
  81. int main()
  82. {
  83. print(4, mt(2), mt(4.2), mt('a'), mt("Hello"));
  84. }
Runtime error #stdin #stdout 0.01s 2676KB
stdin
Standard input is empty
stdout
Standard output is empty