12

私は次のようなテンプレートメソッドを持っています:-

template<typename T, int length>
void ProcessArray(T array[length]) { ... }

そして、上記の方法を使用したコードがあります:-

int numbers[10] = { ... };
ProcessArray<int, 10>(numbers);

私の質問は、なぜテンプレート引数を明示的に指定する必要があるのですか? 次のように使用できるように自動推定できませんか:-

ProcessArray(numbers); // without all the explicit type specification ceremony

私は基本的な何かが欠けていると確信しています!ハンマーを惜しまない!

4

2 に答える 2

14

配列を値で渡すことはできません。関数内のパラメータT array[length]は とまったく同じですT* array。推測できる長さの情報はありません。

配列を値で取得したい場合は、 のようなものが必要ですstd::array。それ以外の場合は、サイズ情報を失うことのない参照によって取得できます。

template<typename T, int length>
void ProcessArray(T (&array)[length]) { ... }
于 2012-06-24T17:11:04.860 に答える
6

正しい引数タイプがありません:配列は参照によってのみ渡すことができます:

template <typename T, unsigned int N>
void process_array(T (&arr)[N])
{
    // arr[1] = 9;
}

double foo[12];
process_array(foo); // fine
于 2012-06-24T17:12:10.240 に答える