3

N-Dim 画像キューブを別の画像形式にエンコードしています。実行時まで画像の寸法がわからず、元の画像から読み取るために使用しているライブラリには、パラメーターとして N-dim 配列の宛先バッファーが必要です。

このような配列を C++ で宣言するにはどうすればよいですか? ありがとう :)

4

2 に答える 2

2

簡単に言えば、C++ ではそのような配列を宣言できないということです。配列の次元は型の一部です (配列宣言では、次元の1 つの値が不明な場合があるというその他の例外があります)。extern次元数は常に型の一部であり、型はコンパイル時に認識されている必要があります。

代わりにできることは、適切なサイズの「フラット」配列を使用することです。たとえば、3x3...x3 配列が必要な場合は3^n、実行時に計算し、その数を動的に割り当てint(おそらくvector<int>便宜上 を使用)、 と同じレイアウトのメモリを使用できますint[3][3]...[3]。このメモリは、 を介して参照できますvoid*

フラット配列を多次元配列としてエイリアスすることが C++ で厳密に合法であるかどうかはわかりません。しかし、最初に、コンパイル時に次元がわからないことを考えると、呼び出している関数が実際にはそのようにエイリアスされない可能性があります。第二に、実際には機能します (機能しない場合は、呼び出している関数が壊れているか、これを処理するための狡猾な方法を見つけてコピーする必要があります)。

于 2013-01-15T11:43:05.333 に答える
-2

この場合、配列は使用できません。配列は、コンパイル時にサイズと次元がわかっているデータ専用です。代わりにstd::vectorの配列を使用してみてください

于 2013-01-15T09:53:26.520 に答える