サイズ不明の std::array を関数に渡す
質問:
型はわかっているがサイズが異なる std::array を処理する関数をどのように作成すればよいでしょうか?たとえば、次の例を考えてみましょう:
<code class="cpp">// Hypothetical function void mulArray(std::array<int, ?>& arr, const int multiplier) { for (auto& e : arr) { e *= multiplier; } }</code>
次のようなさまざまなサイズの配列に対応するために、mulArray などの関数を定義するにはどうすればよいですか:
<code class="cpp">std::array<int, 17> arr1; std::array<int, 6> arr2; std::array<int, 95> arr3;</code>
答え:
残念ながら、関数テンプレートを使用するか、std::vector などの別のコンテナー タイプを使用しない限り、未知のサイズの std::array を受け入れる関数を作成することはできません。
関数テンプレート:
<code class="cpp">template<std::size_t SIZE> void mulArray(std::array<int, SIZE>& arr, const int multiplier) { for (auto& e : arr) { e *= multiplier; } }</code>
この例では、mulArray 関数が関数テンプレートとして定義されており、任意のサイズの配列を処理できるようになります。 SIZE パラメータは、コンパイル時の配列のサイズを指定します。
使用例:
<code class="cpp">// Array of size 17 std::array<int, 17> arr1; // Function call with template instantiation for size 17 mulArray(arr1, 3);</code>
注: 関数テンプレートを使用する場合、関数定義は、コンパイル中にアクセスできるようにヘッダー ファイルに配置する必要があります。
以上がC 関数でさまざまなサイズの std::Array を処理するには?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。