Я хочу создать статический 2d массив с размером [nElements] [nElements], который заменит функцию "addIndices".Как мне сделать это элегантным способом во время компиляции?
Предложение: избегайте массивов в стиле C и используйте (на этот раз) std::array
вместо.
Следуя этому предложению,Я предлагаю
1) заставить getIndices()
a constexpr
метод
2) определить следующее using
(просто для упрощения вашей жизни в следующих пунктах) или что-то подобное (возможно, случшее имя)
using arr2D = std::array<std::array<std::size_t, nElements>, nElements>;
3) определить следующий static constexpr
метод
static constexpr arr2D getIndices ()
{
arr2D ret;
for ( auto i = 0u ; i < nElements; ++i )
for ( auto j = 0u ; j < nElements; ++j )
ret[i][j] = addIndices(i, j);
return ret;
}
4) добавить следующий static constexpr
член в класс (инициализируется следующим образом)
static constexpr arr2D inds { getIndices() };
Теперь у вас есть индексы в элементе constexpr
, инициализированном во время компиляции.