0

配列を const 引数として渡すことに関する私の質問に続いて、引数が固定サイズの const 配列の const 配列であるメソッドを作成する方法を見つけようとしています。唯一の書き込み可能なものは、これらの配列の内容です。

私は次のようなことを考えています:

template <size_t N>
void myMethod(int* const (&inTab)[N])
{
    inTab = 0;       // this won't compile
    inTab[0] = 0;    // this won't compile
    inTab[0][0] = 0; // this will compile
}

このソリューションの唯一の問題は、最初の次元がわからないことです。誰かがこれに対する解決策を持っていますか?

前もって感謝します、

ケビン

[編集]

std::vector などの動的に割り当てられた配列を使用したくありません。

4

2 に答える 2

5

コンパイル時に両方の次元がわかっている場合は、配列へのポインターの配列ではなく、2次元配列(つまり、配列の配列)を使用できます。

template <size_t N, size_t M>
void myMethod(int (&inTab)[N][M])
{
    inTab = 0;       // this won't compile
    inTab[0] = 0;    // this won't compile
    inTab[0][0] = 0; // this will compile
}

int stuff[3][42];
myMethod(stuff); // infers N=3, M=42

実行時にどちらかの次元がわからない場合は、おそらく配列を動的に割り当てる必要があります。その場合はstd::vector、割り当てられたメモリの管理とサイズの追跡の両方を使用することを検討してください。

于 2012-07-24T09:40:51.777 に答える
0

inTab = 0;参照は、参照を作成したため、4 行目 ( )を防ぎinTabます。const は、ポインターが const でinTab[0] = 0;あるため、行 5 ( ) を防ぎます。inTab

于 2012-07-24T09:58:06.407 に答える