Как установить размер std :: array с помощью аргументов пакета параметров? - PullRequest
0 голосов
/ 25 ноября 2018

У меня есть N-мерный класс Matrix, в котором есть конструктор с пакетом параметров.Можно ли установить размер переменной-члена std::array в зависимости от значений в пакете параметров?Насколько я понимаю, значения в пакете параметров должны быть известны во время компиляции.

template<size_t N>
class Matrix {
public:
    template<typename... Exts>
    Matrix(Exts... exts) : dimSizes{exts...} { }

private:
    std::array<size_t, N> dimSizes;
    std::array<float, N> data;
    // e.g something like this: std::array<float, dimSizes[0]> data;
};

int main(void) {
    Matrix<3> mat(2, 3, 2);
    return 0;
}

1 Ответ

0 голосов
/ 25 ноября 2018

Можно ли установить размер переменной-члена std::array в зависимости от значений в пакете параметров?

// например, что-то вроде этого: std::array<float, dimSizes[0]> data;

Нет, насколько я знаю, это невозможно точно так, как вы хотите.

Потому что, таким образом, разные экземпляры одного и того же класса будут содержать члены с одинаковыми именами, но разными типами.Строго запрещено в строго типизированном языке, как C ++.

Если вы хотите std::array с другим размером, вы должны различать типы;поэтому размер для второго std::array должен быть параметром шаблона.

Очевидно, вы можете заменить std::array контейнером, который не зависит от размера;как предположил Петр Скотницкий, возможное решение - std::vector

...