Я хотел бы иметь кортеж, который имеет элемент массива в качестве члена. В частности, я бы хотел, чтобы этот элемент массива был 2D, поэтому любой ответ должен работать более чем на 1D. Мне бы хотелось, чтобы я мог инициализировать списки инициализаторов, например. std::tuple<ARRAY_TYPE, ...>({{0, 1}, {2, 3}}, ...)
.Что такое однострочное выражение для построения кортежа C++ с элементом массива (C или std :: array)?
Похоже, что такой кортеж очень сложно построить, требуя ручной инициализации (то есть для петель и т. П.). Вот что я пробовал:
std::tuple<int[M][N], ...>
- это не работает из-за ограничений массивов в стиле C. Сам кортеж является допустимым типом, но инициализация должна выполняться вручную (не при построении).
std::tuple<std::array<std::array<int, M>, N>, ...>
- Я думал, что это сработает, но по какой-то причине что-то вроде std::tuple<std::array<std::array<int, 2>, 2>, ...>({{0, 1}, {2, 3}}, ...)
терпит неудачу с «отсутствием ошибки конструктора». Однако он работает в 1D.
std::tuple<std::vector<std::vector<int>>, ...>({{0, 1}, {2, 3}}, ...)
фактически делает работу, но векторы, кажется, как избыточна здесь
Любые мысли, SO? Есть ли способ заставить массивы C-стиля работать? Это было бы идеально.
[Это] (http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2015/n4387) может быть актуальным и, по-видимому, ожидается на C++ 17. – Quentin