fork download
  1. #include <iostream>
  2. #include <array>
  3. #include <string>
  4. #include <type_traits>
  5. #include <iomanip>
  6.  
  7. const int ARRAY_SIZE = 5;
  8.  
  9. template <typename C>
  10. class ValArray
  11. {
  12. public:
  13. template<typename T = C, typename std::enable_if<std::is_same<T, bool>::value, int>::type = 0>
  14. ValArray() { _values.fill(false); }
  15.  
  16. template<typename T = C, typename std::enable_if<!std::is_same<T, bool>::value, int>::type = 0>
  17. ValArray() { }
  18.  
  19. ValArray(const ValArray&) = delete;
  20.  
  21. C& operator[](size_t pos) { return _values[pos]; }
  22.  
  23. // ...
  24. private:
  25. std::array<C, ARRAY_SIZE> _values;
  26. };
  27.  
  28. int main()
  29. {
  30. std::cout << std::boolalpha;
  31.  
  32. ValArray<int> val1;
  33. for(int i = 0; i < ARRAY_SIZE; ++i) {
  34. std::cout << "val1[" << i << "] = " << val1[i] << std::endl;
  35. }
  36. std::cout << std::endl;
  37.  
  38. ValArray<bool> val2;
  39. for(int i = 0; i < ARRAY_SIZE; ++i) {
  40. std::cout << "val2[" << i << "] = " << val2[i] << std::endl;
  41. }
  42. std::cout << std::endl;
  43.  
  44. ValArray<std::string> val3;
  45. for(int i = 0; i < ARRAY_SIZE; ++i) {
  46. std::cout << "val3[" << i << "] = \"" << val3[i] << "\"" << std::endl;
  47. }
  48. std::cout << std::endl;
  49.  
  50. return 0;
  51. }
Success #stdin #stdout 0.01s 5456KB
stdin
Standard input is empty
stdout
val1[0] = 0
val1[1] = 0
val1[2] = 267005368
val1[3] = 5261
val1[4] = 267005368

val2[0] = false
val2[1] = false
val2[2] = false
val2[3] = false
val2[4] = false

val3[0] = ""
val3[1] = ""
val3[2] = ""
val3[3] = ""
val3[4] = ""