Я кодирую N-Dim изображения кубов в другой формат изображения. Я не знаю размеры изображения до времени выполнения, и библиотеке, которую я использую для чтения из исходного изображения, нужен буфер назначения массива N-dim в качестве параметра.
Как я могу объявить такой массив в C ++? Спасибо 🙂
Короткий ответ: вы не можете объявить такой массив в C ++. Размеры массива являются частью типа (за исключением того, что иногда значение один размеры могут быть неизвестны, для extern
объявление массива). Число измерений всегда является частью типа, и тип должен быть известен во время компиляции.
Вместо этого вы можете использовать «плоский» массив соответствующего размера. Например, если вам нужен массив 3×3 … x3, вы можете вычислить 3^n
во время выполнения, динамически распределить так много int
(вероятно, используя vector<int>
для удобства), и у вас есть память с тем же макетом, что и int[3][3]...[3]
, Вы можете обратиться к этой памяти через void*
,
Я не уверен, что в C ++ строго разрешено именовать плоский массив как многомерный массив. Но, во-первых, функция, которую вы вызываете, может в любом случае не давать ей псевдоним, поскольку она также не знает размер во время компиляции. Во-вторых, это будет работать на практике (если это не так, вызываемая вами функция либо не работает, либо у вас есть какой-то хитрый способ справиться с этим, о чем вы должны узнать и скопировать).
Вы не можете использовать массив в этом случае. Массив предназначен только для тех данных, размер и размер которых известны во время компиляции. Попробуйте использовать массив станд :: вектор вместо