このコード例の目標は、次の std::array を受け取る関数を作成することです。タイプはわかっていますが、サイズは不明です。これは、さまざまなプログラミング タスクで発生する可能性のある一般的なシナリオです。
<code class="cpp">// made up example void mulArray(std::array<int, ?>& arr, const int multiplier) { for(auto& e : arr) { e *= multiplier; } } // lets imagine these being full of numbers std::array<int, 17> arr1; std::array<int, 6> arr2; std::array<int, 95> arr3; mulArray(arr1, 3); mulArray(arr2, 5); mulArray(arr3, 2);</code>
しかし、開発者が解決策を探しているときに、関数テンプレートを使用するという提案に遭遇しました。関数テンプレートはこの問題を解決できますが、複雑さが増す可能性があり、必ずしも最も効率的なアプローチであるとは限りません。
ここでの疑問は、このタスクを実行するための、より簡単な方法があるかどうかです。プレーンな C スタイルの配列。残念ながら、答えは否定的です。 C では、関数テンプレートを使用せずにサイズが不明な配列を関数に直接渡す方法はありません。
それを可能にするには、以下に示すように、実際に関数テンプレートに頼る必要があります。
<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>
次のライブ例で示すように、この関数テンプレートは任意のサイズの配列で使用できます: https://godbolt.org/z/sV49sK
以上がサイズが不明な std::array を関数に直接渡すことはできますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。