проблема в том что operator[] у std::array не constexpr. Каки есть другие способы реализации? Я могу раскрыть цикл или написать через рекурсию, но как то не очень
                  
                  
                  constexpr std::array<int, 8> to_dim_vec(const int dim) noexcept
                  
                  
                  {
                  
                  
                      constexpr std::array<int, 8> dimsizes = {20, 20, 20, 10, 10, 10, 10, 10};
                  
                  
                      constexpr int dimbias = 444444210;
                  
                  
                  
                  
                  
                      std::array<int, 8> out = {};
                  
                  
                      
                  
                  
                      int m = dim + dimbias;
                  
                  
                      for (size_t i = 0; i < dimsizes.size(); ++i) {
                  
                  
                          int sz = dimsizes[i];
                  
                  
                          int mm = m / sz;
                  
                  
                          out[i] = (m - mm * sz) - sz / 2;
                  
                  
                          m = mm;
                  
                  
                      }
                  
                  
                      return out;
                  
                  
                  }
                  
                  
                
А ranged based for разве не решит эту проблему?
Имена переменных конечно так себе
for (auto sz : dimsizes) {
Чтобы этот кусок кода заработал, надо вместо типа auto подставить
Обсуждают сегодня